diff --git a/dist/claygl.es.js b/dist/claygl.es.js index 5ba476e77..20fc32fc7 100644 --- a/dist/claygl.es.js +++ b/dist/claygl.es.js @@ -1617,11 +1617,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2 Dimensional Vector - * @name vec2 - */ - var vec2 = {}; /** @@ -2108,12 +2103,6 @@ vec2.forEach = (function() { }; })(); -/** - * @constructor - * @alias clay.Vector2 - * @param {number} x - * @param {number} y - */ var Vector2 = function(x, y) { x = x || 0; @@ -2836,36 +2825,6 @@ Vector2.transformMat4 = function(out, a, m) { // 2D Blend clip of blend tree // http://docs.unity3d.com/Documentation/Manual/2DBlending.html -/** - * @typedef {Object} clay.animation.Blend2DClip.IClipInput - * @property {clay.Vector2} position - * @property {clay.animation.Clip} clip - * @property {number} offset - */ - -/** - * 2d blending node in animation blend tree. - * output clip must have blend2D method - * @constructor - * @alias clay.animation.Blend2DClip - * @extends clay.animation.Clip - * - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {object[]} [opts.inputs] - * @param {clay.Vector2} [opts.position] - * @param {clay.animation.Clip} [opts.output] - */ var Blend2DClip = function (opts) { opts = opts || {}; @@ -3020,11 +2979,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3 Dimensional Vector - * @name vec3 - */ - var vec3 = {}; /** @@ -3363,6 +3317,10 @@ vec3.normalize = function(out, a) { out[0] = a[0] * len; out[1] = a[1] * len; out[2] = a[2] * len; + }else{ + out[0] = 0; + out[1] = 0; + out[2] = 1; } return out; }; @@ -3667,11 +3625,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4 Dimensional Vector - * @name vec4 - */ - var vec4 = {}; /** @@ -4193,11 +4146,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3x3 Matrix - * @name mat3 - */ - var mat3 = {}; /** @@ -4837,6 +4785,20 @@ quat.setAxisAngle = function(out, axis, rad) { return out; }; +/** + * zh : 绕单位向量自转 + * @param out {quat} + * @param quat2 {quat} + * @param axis {vec3} + * @param rad {Number} + */ + +quat.rotateAxis = function (out,quat2,axis,rad) { + vec3.normalize(axis,axis); + quat.setAxisAngle(quat2,axis,rad); + quat.multiply(out,out,quat2); +}; + /** * Adds two quat's * @@ -4892,16 +4854,10 @@ quat.scale = vec4.scale; * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateX = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bx = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw + aw * bx; - out[1] = ay * bw + az * bx; - out[2] = az * bw - ay * bx; - out[3] = aw * bw - ax * bx; +quat.rotateX = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [1,0,0]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -4913,16 +4869,10 @@ quat.rotateX = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateY = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - by = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw - az * by; - out[1] = ay * bw + aw * by; - out[2] = az * bw + ax * by; - out[3] = aw * bw - ay * by; +quat.rotateY = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,1,0]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -4934,16 +4884,10 @@ quat.rotateY = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateZ = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bz = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw + ay * bz; - out[1] = ay * bw - ax * bz; - out[2] = az * bw + aw * bz; - out[3] = aw * bw - az * bz; +quat.rotateZ = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,0,1]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -4958,7 +4902,6 @@ quat.rotateZ = function (out, a, rad) { */ quat.calculateW = function (out, a) { var x = a[0], y = a[1], z = a[2]; - out[0] = x; out[1] = y; out[2] = z; @@ -5164,7 +5107,6 @@ quat.fromMat3 = function(out, m) { // Sampler clip is especially for the animation sampler in glTF // Use Typed Array can reduce a lot of heap memory -// lerp function with offset in large array function vec3lerp(out, a, b, t, oa, ob) { var ax = a[oa]; var ay = a[oa + 1]; @@ -6056,12 +5998,6 @@ var util$1 = { } }; -/** - * Base class of all objects - * @constructor - * @alias clay.core.Base - * @mixes clay.core.mixin.notifier - */ var Base = function () { /** * @type {number} @@ -6193,28 +6129,6 @@ vendor.removeEventListener = function (dom, type, func) { dom.removeEventListener(type, func); }; -/** - * Animation is global timeline that schedule all clips. each frame animation will set the time of clips to current and update the states of clips - * @constructor clay.Timeline - * @extends clay.core.Base - * - * @example - * var animation = new clay.Timeline(); - * var node = new clay.Node(); - * animation.animate(node.position) - * .when(1000, { - * x: 500, - * y: 500 - * }) - * .when(2000, { - * x: 100, - * y: 100 - * }) - * .when(3000, { - * z: 10 - * }) - * .start('spline'); - */ var Timeline = Base.extend(function () { return /** @lends clay.Timeline# */{ /** @@ -6410,27 +6324,6 @@ var Timeline = Base.extend(function () { // DEPRECATED -/** - * - * Animation clip that manage a collection of {@link clay.animation.SamplerTrack} - * @constructor - * @alias clay.animation.TrackClip - * - * @extends clay.animation.Clip - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {Array.} [opts.tracks] - */ var TrackClip = function (opts) { opts = opts || {}; @@ -6682,14 +6575,16 @@ function GLInfo(_gl) { }; function createExtension(name) { - var ext = _gl.getExtension(name); - if (!ext) { - ext = _gl.getExtension('MOZ_' + name); - } - if (!ext) { - ext = _gl.getExtension('WEBKIT_' + name); + if (_gl.getExtension) { + var ext = _gl.getExtension(name); + if (!ext) { + ext = _gl.getExtension('MOZ_' + name); + } + if (!ext) { + ext = _gl.getExtension('WEBKIT_' + name); + } + extensions[name] = ext; } - extensions[name] = ext; } } @@ -7371,11 +7266,6 @@ LinkedList.Entry = function (val) { this.prev = null; }; -/** - * LRU Cache - * @constructor - * @alias clay.core.LRU - */ var LRU$1 = function (maxSize) { this._list = new LinkedList(); @@ -8785,6 +8675,15 @@ var GLProgram = Base.extend({ _gl.linkProgram(program); + _gl.deleteShader(vertexShader); + _gl.deleteShader(fragmentShader); + + this._program = program; + + // Save code. + this.vertexCode = vertexShaderCode; + this.fragmentCode = fragmentShaderCode; + if (!_gl.getProgramParameter(program, _gl.LINK_STATUS)) { return 'Could not link program\n' + _gl.getProgramInfoLog(program); } @@ -8795,14 +8694,6 @@ var GLProgram = Base.extend({ this._locations[uniformSymbol] = _gl.getUniformLocation(program, uniformSymbol); } - _gl.deleteShader(vertexShader); - _gl.deleteShader(fragmentShader); - - this._program = program; - - // Save code. - this.vertexCode = vertexShaderCode; - this.fragmentCode = fragmentShaderCode; } }); @@ -9659,7 +9550,7 @@ Shader.source = function (name) { return obj; }; -var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; +var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv * uvRepeat + uvOffset;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. @@ -9683,11 +9574,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4x4 Matrix - * @name mat4 - */ - var mat4 = {}; /** @@ -10603,7 +10489,6 @@ mat4.frob = function (a) { // TODO Resources like shader, texture, geometry reference management // Trace and find out which shader, texture, geometry can be destroyed -// Light header Shader['import'](prezGlsl); var mat4Create = mat4.create; @@ -10829,8 +10714,10 @@ var Renderer = Base.extend(function () { // set the display size of the canvas. var dpr = this.devicePixelRatio; if (width != null) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; + if (canvas.style) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } // set the size of the drawingBuffer canvas.width = width * dpr; canvas.height = height * dpr; @@ -11113,6 +11000,7 @@ var Renderer = Base.extend(function () { else { this.trigger('error', errorMsg); } + } }, @@ -11695,6 +11583,12 @@ var Renderer = Base.extend(function () { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -11923,13 +11817,6 @@ Renderer.DEPTH_BUFFER_BIT = glenum.DEPTH_BUFFER_BIT; */ Renderer.STENCIL_BUFFER_BIT = glenum.STENCIL_BUFFER_BIT; -/** - * @constructor - * @alias clay.Vector3 - * @param {number} x - * @param {number} y - * @param {number} z - */ var Vector3 = function(x, y, z) { x = x || 0; @@ -12920,14 +12807,6 @@ Object.defineProperties(Vector3, { } }); -/** - * @constructor - * @alias clay.Quaternion - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Quaternion = function (x, y, z, w) { x = x || 0; @@ -13181,6 +13060,19 @@ Quaternion.prototype = { this._dirty = true; return this; }, + /** + * + * @param axis + * @param rad + */ + rotateAxis:function (axis,rad) { + + var quat2 = new Quaternion().array; + + quat.rotateAxis(this.array,quat2,axis,rad); + this._dirty = true; + return this; + }, /** * Rotate self by a given radian about X axis @@ -13188,7 +13080,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateX: function (rad) { - quat.rotateX(this.array, this.array, rad); + + quat.rotateX(this.array, rad); this._dirty = true; return this; }, @@ -13199,7 +13092,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateY: function (rad) { - quat.rotateY(this.array, this.array, rad); + + quat.rotateY(this.array, rad); this._dirty = true; return this; }, @@ -13210,7 +13104,7 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateZ: function (rad) { - quat.rotateZ(this.array, this.array, rad); + quat.rotateZ(this.array, rad); this._dirty = true; return this; }, @@ -13690,10 +13584,6 @@ Quaternion.fromEuler = function (out, v, order) { } }; -/** - * @constructor - * @alias clay.Matrix4 - */ var Matrix4 = function() { this._axisX = new Vector3(); @@ -15478,12 +15368,6 @@ var Light = Node.extend(function(){ } }); -/** - * @constructor - * @alias clay.Plane - * @param {clay.Vector3} [normal] - * @param {number} [distance] - */ var Plane$1 = function(normal, distance) { /** * Normal of the plane @@ -16132,10 +16016,6 @@ Ray.prototype = { } }; -/** - * @constructor clay.Camera - * @extends clay.Node - */ var Camera = Node.extend(function () { return /** @lends clay.Camera# */ { /** @@ -18128,13 +18008,6 @@ Geometry.IndicesBuffer = GeometryBase.IndicesBuffer; Geometry.Attribute = Attribute; -/** - * @constructor clay.geometry.Plane - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.widthSegments] - * @param {number} [opt.heightSegments] - */ var Plane$3 = Geometry.extend( /** @lends clay.geometry.Plane# */ { @@ -18326,18 +18199,6 @@ function createPlane(pos, widthSegments, heightSegments) { return plane; } -/** - * @constructor clay.geometry.Sphere - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [widthSegments] - * @param {number} [heightSegments] - * @param {number} [phiStart] - * @param {number} [phiLength] - * @param {number} [thetaStart] - * @param {number} [thetaLength] - * @param {number} [radius] - */ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { dynamic: false, /** @@ -18461,17 +18322,6 @@ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { } }); -/** - * @constructor clay.geometry.ParametricSurface - * @extends clay.Geometry - * @param {Object} [opt] - * @param {Object} [generator] - * @param {Function} generator.x - * @param {Function} generator.y - * @param {Function} generator.z - * @param {Array} [generator.u=[0, 1, 0.05]] - * @param {Array} [generator.v=[0, 1, 0.05]] - */ var ParametricSurface$1 = Geometry.extend( /** @lends clay.geometry.ParametricSurface# */ { @@ -18563,11 +18413,6 @@ var ParametricSurface$1 = Geometry.extend( * Base class for all textures like compressed texture, texture2d, texturecube * TODO mapping */ -/** - * @constructor - * @alias clay.Texture - * @extends clay.core.Base - */ var Texture = Base.extend( /** @lends clay.Texture# */ { /** * Texture width, readonly when the texture source is image @@ -19162,9 +19007,7 @@ var Texture2D = Texture.extend(function () { isRenderable: function () { if (this.image) { - return this.image.nodeName === 'CANVAS' - || this.image.nodeName === 'VIDEO' - || this.image.complete; + return this.image.width > 0 && this.image.height > 0; } else { return !!(this.width && this.height); @@ -19500,16 +19343,9 @@ Object.defineProperty(TextureCube.prototype, 'height', { } }); function isImageRenderable(image) { - return image.nodeName === 'CANVAS' || - image.nodeName === 'VIDEO' || - image.complete; + return image.width > 0 && image.height > 0; } -/** - * @constructor - * @alias clay.Renderable - * @extends clay.Node - */ var Renderable = Node.extend(/** @lends clay.Renderable# */ { /** * @type {clay.Material} @@ -19712,10 +19548,6 @@ Renderable.CW = glenum.CW; */ Renderable.CCW = glenum.CCW; -/** - * @constructor clay.Mesh - * @extends clay.Renderable - */ var Mesh = Renderable.extend(/** @lends clay.Mesh# */ { /** * Used when it is a skinned mesh @@ -19769,10 +19601,6 @@ Mesh.FRONT_AND_BACK = glenum.FRONT_AND_BACK; Mesh.CW = glenum.CW; Mesh.CCW = glenum.CCW; -/** - * @constructor clay.camera.Perspective - * @extends clay.Camera - */ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ /** * Vertical field of view in degrees @@ -19824,10 +19652,6 @@ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ } }); -/** - * @constructor clay.camera.Orthographic - * @extends clay.Camera - */ var Orthographic$1 = Camera.extend( /** @lends clay.camera.Orthographic# */ { @@ -19888,9 +19712,8 @@ var Orthographic$1 = Camera.extend( } }); -var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; +var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; -// Import standard shader Shader['import'](standardEssl); var TEXTURE_PROPERTIES = ['diffuseMap', 'normalMap', 'roughnessMap', 'metalnessMap', 'emissiveMap', 'environmentMap', 'brdfLookup', 'ssaoMap', 'aoMap']; @@ -20264,10 +20087,6 @@ var library = { } }; -/** - * @constructor clay.Joint - * @extends clay.core.Base - */ var Joint = Base.extend( /** @lends clay.Joint# */ { @@ -20716,13 +20535,14 @@ library.template('clay.prez', Shader.source('clay.prez.vertex'), Shader.source(' library.template('clay.standard', Shader.source('clay.standard.vertex'), Shader.source('clay.standard.fragment')); library.template('clay.standardMR', Shader.source('clay.standardMR.vertex'), Shader.source('clay.standardMR.fragment')); +// TODO Must export a module and be used in the other modules. Or it will be tree shaked + /** * glTF Loader * Specification https://github.com/KhronosGroup/glTF/blob/master/specification/README.md * * TODO Morph targets */ -// Import builtin shader var semanticAttributeMap = { 'NORMAL': 'normal', 'POSITION': 'position', @@ -20768,7 +20588,8 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { if (quantizeExtension) { var decodedArr = new vendor.Float32Array(size * accessorInfo.count); var decodeMatrix = quantizeExtension.decodeMatrix; - var decodeOffset, decodeScale; + var decodeOffset; + var decodeScale; var decodeOffset = new Array(size); var decodeScale = new Array(size); for (var k = 0; k < size; k++) { @@ -20786,6 +20607,34 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { return arr; } +function base64ToBinary(input, charStart) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var lookup = new Uint8Array(130); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + // Ignore + var len = input.length - charStart; + if (input.charAt(len - 1) === '=') { len--; } + if (input.charAt(len - 1) === '=') { len--; } + + var uarray = new Uint8Array((len / 4) * 3); + + for (var i = 0, j = charStart; i < uarray.length;) { + var c1 = lookup[input.charCodeAt(j++)]; + var c2 = lookup[input.charCodeAt(j++)]; + var c3 = lookup[input.charCodeAt(j++)]; + var c4 = lookup[input.charCodeAt(j++)]; + + uarray[i++] = (c1 << 2) | (c2 >> 4); + uarray[i++] = ((c2 & 15) << 4) | (c3 >> 2); + uarray[i++] = ((c3 & 3) << 6) | c4; + } + + return uarray.buffer; +} + + /** * @typedef {Object} clay.loader.GLTF.Result * @property {Object} json @@ -21019,7 +20868,7 @@ function () { loading++; var path = bufferInfo.uri; - self._loadBuffer(path, function (buffer) { + self._loadBuffers(path, function (buffer) { lib.buffers[idx] = buffer; checkLoad(); }, checkLoad); @@ -21101,7 +20950,7 @@ function () { * Binary file path resolver. User can override it * @param {string} path */ - resolveBinaryPath: function (path) { + resolveBufferPath: function (path) { if (path && path.match(/^data:(.*?)base64,/)) { return path; } @@ -21129,18 +20978,15 @@ function () { return util$1.relative2absolute(path, rootPath); }, - _getShader: function () { - if (typeof this.shader === 'string') { - return this.shaderLibrary.get(this.shader); - } - else if (this.shader instanceof Shader) { - return this.shader; - } - }, - - _loadBuffer: function (path, onsuccess, onerror) { + /** + * Buffer loader + * @param {string} + * @param {Function} onsuccess + * @param {Function} onerror + */ + loadBuffer: function (path, onsuccess, onerror) { vendor.request.get({ - url: this.resolveBinaryPath(path), + url: path, responseType: 'arraybuffer', onload: function (buffer) { onsuccess && onsuccess(buffer); @@ -21151,6 +20997,32 @@ function () { }); }, + _getShader: function () { + if (typeof this.shader === 'string') { + return this.shaderLibrary.get(this.shader); + } + else if (this.shader instanceof Shader) { + return this.shader; + } + }, + + _loadBuffers: function (path, onsuccess, onerror) { + var base64Prefix = 'data:application/octet-stream;base64,'; + var strStart = path.substr(0, base64Prefix.length); + if (strStart === base64Prefix) { + onsuccess( + base64ToBinary(path, base64Prefix.length) + ); + } + else { + this.loadBuffer( + this.resolveBufferPath(path), + onsuccess, + onerror + ); + } + }, + // https://github.com/KhronosGroup/glTF/issues/100 // https://github.com/KhronosGroup/glTF/issues/193 _parseSkins: function (json, lib) { @@ -21494,7 +21366,7 @@ function () { var material; var diffuseMap, glossinessMap, specularMap, normalMap, emissiveMap, occlusionMap; var enabledTextures = []; - // TODO texCoord + // TODO texCoord if (specularGlossinessMatInfo.diffuseTexture) { diffuseMap = lib.textures[specularGlossinessMatInfo.diffuseTexture.index] || null; diffuseMap && enabledTextures.push('diffuseMap'); @@ -21909,19 +21781,6 @@ GLTFLoader.generateMeshName = function (meshes, idx, primitiveIdx) { return primitiveIdx === 0 ? meshName : (meshName + '$' + primitiveIdx); }; -/** - * @constructor clay.light.Directional - * @extends clay.Light - * - * @example - * var light = new clay.light.Directional({ - * intensity: 0.5, - * color: [1.0, 0.0, 0.0] - * }); - * light.position.set(10, 10, 10); - * light.lookAt(clay.Vector3.ZERO); - * scene.add(light); - */ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { /** * @type {number} @@ -21977,10 +21836,6 @@ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { } }); -/** - * @constructor clay.light.Point - * @extends clay.Light - */ var PointLight = Light.extend(/** @lends clay.light.Point# */ { /** * @type {number} @@ -22028,10 +21883,6 @@ var PointLight = Light.extend(/** @lends clay.light.Point# */ { } }); -/** - * @constructor clay.light.Spot - * @extends clay.Light - */ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { /** * @type {number} @@ -22125,10 +21976,6 @@ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { } }); -/** - * @constructor clay.light.Ambient - * @extends clay.Light - */ var AmbientLight = Light.extend({ castShadow: false @@ -22780,7 +22627,9 @@ var Skybox$1 = Mesh.extend(function () { environmentMap: null, - culling: false + culling: false, + + _dummyCamera: new Perspective$1() }; }, function () { var scene = this.scene; @@ -22851,8 +22700,17 @@ var Skybox$1 = Mesh.extend(function () { }, renderSkybox: function (renderer, camera) { + var dummyCamera = this._dummyCamera; + dummyCamera.aspect = renderer.getViewportAspect(); + dummyCamera.fov = camera.fov || 50; + dummyCamera.updateProjectionMatrix(); + Matrix4.invert(dummyCamera.invProjectionMatrix, dummyCamera.projectionMatrix); + dummyCamera.worldTransform.copy(camera.worldTransform); + dummyCamera.viewMatrix.copy(camera.viewMatrix); + this.position.copy(camera.getWorldPosition()); this.update(); + // Don't remember to disable blend renderer.gl.disable(renderer.gl.BLEND); if (this.material.get('lod') > 0) { @@ -22861,7 +22719,7 @@ var Skybox$1 = Mesh.extend(function () { else { this.material.undefine('fragment', 'LOD'); } - renderer.renderPass([this], camera); + renderer.renderPass([this], dummyCamera); } }); @@ -23002,8 +22860,6 @@ var EnvironmentMapPass = Base.extend(function() { } }); -// http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx -// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js var DDS_MAGIC = 0x20534444; var DDSD_MIPMAPCOUNT = 0x20000; @@ -23288,9 +23144,6 @@ var ret$1 = { } }; -/** - * @alias clay.util.texture - */ var textureUtil = { /** * @param {string|object} path @@ -23864,12 +23717,6 @@ cubemapUtil.generateNormalDistribution = function (roughnessLevels, sampleSize) }; // https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/AmbientCubemap/ -/** - * Ambient cubemap light provides specular parts of Image Based Lighting. - * Which is a basic requirement for Physically Based Rendering - * @constructor clay.light.AmbientCubemap - * @extends clay.Light - */ var AmbientCubemapLight = Light.extend({ /** @@ -23958,11 +23805,6 @@ var AmbientCubemapLight = Light.extend({ */ }); -/** - * Spherical Harmonic Ambient Light - * @constructor clay.light.AmbientSH - * @extends clay.Light - */ var AmbientSHLight = Light.extend({ castShadow: false, @@ -24113,7 +23955,7 @@ function isPowerOfTwo$2(width, height) { (height & (height-1)) === 0; } -var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; +var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; var targets$2 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; @@ -24132,6 +23974,12 @@ function getDepthMaterialUniform(renderable, depthMaterial, symbol) { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -24989,10 +24837,6 @@ ShadowMapPass.VSM = 1; */ ShadowMapPass.PCF = 2; -/** - * @constructor clay.picking.RayPicking - * @extends clay.core.Base - */ var RayPicking = Base.extend(/** @lends clay.picking.RayPicking# */{ /** * Target scene @@ -25245,6 +25089,7 @@ var sh = {}; var targets$3 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; +// Project on gpu, but needs browser to support readPixels as Float32Array. function harmonics(normal, index){ var x = normal[0]; var y = normal[1]; @@ -25459,6 +25304,7 @@ var EVE_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', /** * @typedef {Object} StandardMaterialMRConfig + * @property {string} [name] * @property {string} [shader='standardMR'] * @property {Color} [color] * @property {number} [alpha] @@ -26143,6 +25989,10 @@ App3D.prototype.createMaterial = function (matConfig) { var material = new Material({ shader: shader }); + if (matConfig.name) { + material.name = matConfig.name; + } + var texturesLoading = []; function makeTextureSetter(key) { return function (texture) { @@ -26285,6 +26135,7 @@ App3D.prototype.createSphere = function (material, parentNode, subdivision) { return this.createMesh(sphere, material, parentNode); }; +// TODO may be modified? /** * Create a plane mesh and add it to the scene or the given parent node. * @function @@ -26737,11 +26588,6 @@ var application = { } }; -/** - * @constructor - * @alias clay.async.Task - * @mixes clay.core.mixin.notifier - */ function Task() { this._fullfilled = false; this._rejected = false; @@ -26853,11 +26699,6 @@ Task.makeTask = function() { util$1.extend(Task.prototype, notifier); -/** - * @constructor - * @alias clay.async.TaskGroup - * @extends clay.async.Task - */ var TaskGroup = function () { Task.apply(this, arguments); @@ -27079,16 +26920,6 @@ TaskGroup.prototype.getTaskNumber = function (recursive) { } }; -// PENDING -// Use topological sort ? - -/** - * Node of graph based post processing. - * - * @constructor clay.compositor.CompositorNode - * @extends clay.core.Base - * - */ var CompositorNode = Base.extend(function () { return /** @lends clay.compositor.CompositorNode# */ { /** @@ -27322,10 +27153,6 @@ var CompositorNode = Base.extend(function () { } }); -/** - * @constructor clay.compositor.Graph - * @extends clay.core.Base - */ var Graph = Base.extend(function () { return /** @lends clay.compositor.Graph# */ { /** @@ -27458,13 +27285,6 @@ var Graph = Base.extend(function () { } }); -/** - * Compositor provide graph based post processing - * - * @constructor clay.compositor.Compositor - * @extends clay.compositor.Graph - * - */ var Compositor = Graph.extend(function() { return { // Output node @@ -27539,10 +27359,6 @@ var Compositor = Graph.extend(function() { } }); -/** - * @constructor clay.compositor.SceneNode - * @extends clay.compositor.CompositorNode - */ var SceneNode$1 = CompositorNode.extend( /** @lends clay.compositor.SceneNode# */ { @@ -27629,10 +27445,6 @@ var SceneNode$1 = CompositorNode.extend( } }); -/** - * @constructor clay.compositor.TextureNode - * @extends clay.compositor.CompositorNode - */ var TextureNode$1 = CompositorNode.extend(function() { return /** @lends clay.compositor.TextureNode# */ { /** @@ -27658,45 +27470,6 @@ var TextureNode$1 = CompositorNode.extend(function() { }); // TODO Shader library -// TODO curlnoise demo wrong - -// PENDING -// Use topological sort ? - -/** - * Filter node - * - * @constructor clay.compositor.FilterNode - * @extends clay.compositor.CompositorNode - * - * @example - var node = new clay.compositor.FilterNode({ - name: 'fxaa', - shader: clay.Shader.source('clay.compositor.fxaa'), - inputs: { - texture: { - node: 'scene', - pin: 'color' - } - }, - // Multiple outputs is preserved for MRT support in WebGL2.0 - outputs: { - color: { - attachment: clay.FrameBuffer.COLOR_ATTACHMENT0 - parameters: { - format: clay.Texture.RGBA, - width: 512, - height: 512 - }, - // Node will keep the RTT rendered in last frame - keepLastFrame: true, - // Force the node output the RTT rendered in last frame - outputLastFrame: true - } - } - }); - * - */ var FilterNode$1 = CompositorNode.extend(function () { return /** @lends clay.compositor.FilterNode# */ { /** @@ -27984,9 +27757,6 @@ var blendEssl = "@export clay.compositor.blend\n#define SHADER_NAME blend\n#ifde var fxaaEssl = "@export clay.compositor.fxaa\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nvarying vec2 v_Texcoord;\n#define FXAA_REDUCE_MIN (1.0/128.0)\n#define FXAA_REDUCE_MUL (1.0/8.0)\n#define FXAA_SPAN_MAX 8.0\n@import clay.util.rgbm\nvoid main()\n{\n vec2 resolution = 1.0 / viewport.zw;\n vec3 rgbNW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbNE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ) ).xyz;\n vec4 rgbaM = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution ) );\n vec3 rgbM = rgbaM.xyz;\n float opacity = rgbaM.w;\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float lumaNW = dot( rgbNW, luma );\n float lumaNE = dot( rgbNE, luma );\n float lumaSW = dot( rgbSW, luma );\n float lumaSE = dot( rgbSE, luma );\n float lumaM = dot( rgbM, luma );\n float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\n float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\n float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\n dir = min( vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * resolution;\n vec3 rgbA = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA *= 0.5;\n vec3 rgbB = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * -0.5 ) ).xyz;\n rgbB += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * 0.5 ) ).xyz;\n rgbB *= 0.25;\n rgbB += rgbA * 0.5;\n float lumaB = dot( rgbB, luma );\n if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) )\n {\n gl_FragColor = vec4( rgbA, opacity );\n }\n else {\n gl_FragColor = vec4( rgbB, opacity );\n }\n}\n@end"; -// import fxaa3Essl from './source/compositor/fxaa3.glsl.js'; - -// TODO Must export a module and be used in the other modules. Or it will be tree shaked function register(Shader) { // Some build in shaders Shader['import'](coloradjustEssl); @@ -28915,16 +28685,6 @@ var GBuffer = Base.extend(function () { } }); -/** - * @constructor clay.geometry.Cone - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.topRadius] - * @param {number} [opt.bottomRadius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { dynamic: false, /** @@ -29047,15 +28807,6 @@ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { } }); -/** - * @constructor clay.geometry.Cylinder - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.radius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cylinder$1 = Geometry.extend( /** @lends clay.geometry.Cylinder# */ { @@ -29125,7 +28876,6 @@ var tubeGlsl = "@export clay.deferred.tube_light\n@import clay.deferred.chunk.li // Light-pre pass deferred rendering // http://www.realtimerendering.com/blog/deferred-lighting-approaches/ -// Light shaders Shader.import(prezGlsl); Shader.import(utilGlsl); Shader.import(lightvolumeGlsl); @@ -29753,11 +29503,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x2 Matrix - * @name mat2 - */ - var mat2 = {}; /** @@ -30004,25 +29749,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x3 Matrix - * @name mat2d - * - * @description - * A mat2d contains six elements defined as: - *
- * [a, c, tx,
- *  b, d, ty]
- * 
- * This is a short form for the 3x3 matrix: - *
- * [a, c, tx,
- *  b, d, ty,
- *  0, 0, 1]
- * 
- * The last row is ignored so the array is shorter and operations are faster. - */ - var mat2d = {}; /** @@ -30267,10 +29993,6 @@ var glmatrix = { // DEPRECATED -/** - * @constructor clay.light.Sphere - * @extends {clay.Light} - */ var SphereLight = Light.extend( /** @lends clay.light.Sphere# */ { @@ -30317,10 +30039,6 @@ var SphereLight = Light.extend( } }); -/** - * @constructor clay.light.Tube - * @extends {clay.Light} - */ var TubeLight = Light.extend( /** @lends clay.light.Tube# */ { @@ -30375,10 +30093,6 @@ var TubeLight = Light.extend( } }); -/** - * @constructor clay.loader.FX - * @extends clay.core.Base - */ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { /** * @type {string} @@ -30435,10 +30149,6 @@ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { } }); -/** - * @constructor - * @alias clay.Matrix2 - */ var Matrix2 = function() { /** @@ -30719,10 +30429,6 @@ Matrix2.transpose = function(out, a) { return out; }; -/** - * @constructor - * @alias clay.Matrix2d - */ var Matrix2d = function() { /** * Storage of Matrix2d @@ -30985,10 +30691,6 @@ Matrix2d.translate = function(out, a, v) { return out; }; -/** - * @constructor - * @alias clay.Matrix3 - */ var Matrix3 = function () { /** @@ -31378,11 +31080,6 @@ Matrix3.translate = function (out, a, v) { return out; }; -/** - * Random or constant 1d, 2d, 3d vector generator - * @constructor - * @alias clay.Value - */ var Value = function() {}; /** @@ -31517,14 +31214,6 @@ Value.random3D = function(min, max) { return new Random3D(min, max); }; -/** - * @constructor - * @alias clay.Vector4 - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Vector4 = function(x, y, z, w) { x = x || 0; @@ -32233,10 +31922,6 @@ Vector4.transformQuat = function(out, a, q) { return out; }; -/** - * @constructor - * @alias clay.particle.Particle - */ var Particle = function() { /** * @type {clay.Vector3} @@ -32298,10 +31983,6 @@ Particle.prototype.update = function(deltaTime) { } }; -/** - * @constructor clay.particle.Emitter - * @extends clay.core.Base - */ var Emitter = Base.extend( /** @lends clay.particle.Emitter# */ { /** * Maximum number of particles created by this emitter @@ -32449,10 +32130,6 @@ Emitter.random2D = Value.random2D; */ Emitter.random3D = Value.random3D; -/** - * @constructor clay.particle.Field - * @extends clay.core.Base - */ var Field = Base.extend({}, { /** * Apply a field to the particle and update the particle velocity @@ -32465,10 +32142,6 @@ var Field = Base.extend({}, { applyTo: function(velocity, position, weight, deltaTime) {} }); -/** - * @constructor clay.particle.ForceField - * @extends clay.particle.Field - */ var ForceField = Field.extend(function() { return { force: new Vector3() @@ -33153,10 +32826,11 @@ var FreeControl = Base.extend(function() { this.trigger('change'); }, - _detectMovementChange: function () { + _detectMovementChange: function (frameTime) { if (this._moveForward || this._moveBackward || this._moveLeft || this._moveRight) { this.trigger('change'); } + this.update(frameTime); }, _keyDown: function(e) { @@ -33204,23 +32878,6 @@ var FreeControl = Base.extend(function() { } }); -/** - * Gamepad Control plugin. - * - * @constructor clay.plugin.GamepadControl - * - * @example - * init: function(app) { - * this._gamepadControl = new clay.plugin.GamepadControl({ - * target: camera, - * onStandardGamepadReady: customCallback - * }); - * }, - * - * loop: function(app) { - * this._gamepadControl.update(app.frameTime); - * } - */ var GamepadControl = Base.extend(function() { return /** @lends clay.plugin.GamepadControl# */ { @@ -33758,6 +33415,12 @@ var InfinitePlane = Mesh.extend({ })() }); +var MOUSE_BUTTON_KEY_MAP = { + left: 0, + middle: 1, + right: 2 +}; + function convertToArray(val) { if (!Array.isArray(val)) { val = [val, val]; @@ -33774,6 +33437,9 @@ var OrbitControl = Base.extend(function () { return /** @lends clay.plugin.OrbitControl# */ { + /** + * @type {clay.Timeline} + */ timeline: null, /** @@ -33804,6 +33470,22 @@ var OrbitControl = Base.extend(function () { */ maxDistance: 1000, + /** + * Only available when camera is orthographic + */ + maxOrthographicSize: 300, + + /** + * Only available when camera is orthographic + */ + minOrthographicSize: 30, + + /** + * Aspect of orthographic camera + * Only available when camera is orthographic + */ + orthographicAspect: 1, + /** * Minimum alpha rotation */ @@ -33838,6 +33520,9 @@ var OrbitControl = Base.extend(function () { */ autoRotateSpeed: 60, + panMouseButton: 'middle', + rotateMouseButton: 'left', + /** * Pan or rotate * @type {String} @@ -33915,6 +33600,9 @@ var OrbitControl = Base.extend(function () { if (this.timeline) { this.timeline.on('frame', this.update, this); } + if (this.target) { + this.decomposeTransform(); + } }, /** @@ -33957,6 +33645,23 @@ var OrbitControl = Base.extend(function () { this._needsUpdate = true; }, + /** + * Get size of orthographic viewing volume + * @return {number} + */ + getOrthographicSize: function () { + return this._orthoSize; + }, + + /** + * Set size of orthographic viewing volume + * @param {number} size + */ + setOrthographicSize: function (size) { + this._orthoSize = size; + this._needsUpdate = true; + }, + /** * Get alpha rotation * Alpha angle for top-down rotation. Positive to rotate to top. @@ -34022,6 +33727,7 @@ var OrbitControl = Base.extend(function () { 'autoRotateDirection', 'autoRotateSpeed', 'damping', 'minDistance', 'maxDistance', + 'minOrthographicSize', 'maxOrthographicSize', 'orthographicAspect', 'minAlpha', 'maxAlpha', 'minBeta', 'maxBeta', 'rotateSensitivity', 'zoomSensitivity', 'panSensitivity' ].forEach(function (key) { @@ -34033,6 +33739,9 @@ var OrbitControl = Base.extend(function () { if (opts.distance != null) { this.setDistance(opts.distance); } + if (opts.orthographicSize != null) { + this.setOrthographicSize(opts.orthographicSize); + } if (opts.alpha != null) { this.setAlpha(opts.alpha); @@ -34044,11 +33753,17 @@ var OrbitControl = Base.extend(function () { if (opts.center) { this.setCenter(opts.center); } + + if (this.target) { + this._updateTransform(); + this.target.update(); + } }, /** * @param {Object} opts * @param {number} opts.distance + * @param {number} opts.orthographicSize * @param {number} opts.alpha * @param {number} opts.beta * @param {Array.} opts.center @@ -34069,6 +33784,10 @@ var OrbitControl = Base.extend(function () { obj.distance = this.getDistance(); target.distance = opts.distance; } + if (opts.orthographicSize != null) { + obj.orthographicSize = this.getOrthographicSize(); + target.orthographicSize = opts.orthographicSize; + } if (opts.alpha != null) { obj.alpha = this.getAlpha(); target.alpha = opts.alpha; @@ -34095,6 +33814,9 @@ var OrbitControl = Base.extend(function () { if (obj.distance != null) { self.setDistance(obj.distance); } + if (obj.orthographicSize != null) { + self.setOrthographicSize(obj.orthographicSize); + } if (obj.center != null) { self.setCenter(obj.center); } @@ -34144,7 +33866,7 @@ var OrbitControl = Base.extend(function () { } // Fixed deltaTime - this._updateDistance(Math.min(deltaTime, 50)); + this._updateDistanceOrSize(Math.min(deltaTime, 50)); this._updatePan(Math.min(deltaTime, 50)); this._updateRotate(Math.min(deltaTime, 50)); @@ -34169,15 +33891,31 @@ var OrbitControl = Base.extend(function () { this._vectorDamping(velocity, this.damping); }, - _updateDistance: function (deltaTime) { + _updateDistanceOrSize: function (deltaTime) { this._setDistance(this._distance + this._zoomSpeed * deltaTime / 20); - this._zoomSpeed *= this.damping; + if (!(this.target instanceof Perspective$1)) { + this._setOrthoSize(this._orthoSize + this._zoomSpeed * deltaTime / 20); + } + + this._zoomSpeed *= Math.pow(this.damping, deltaTime / 16); }, _setDistance: function (distance) { this._distance = Math.max(Math.min(distance, this.maxDistance), this.minDistance); }, + _setOrthoSize: function (size) { + this._orthoSize = Math.max(Math.min(size, this.maxOrthographicSize), this.minOrthographicSize); + var camera = this.target; + var cameraHeight = this._orthoSize; + // TODO + var cameraWidth = cameraHeight * this.orthographicAspect; + camera.left = -cameraWidth / 2; + camera.right = cameraWidth / 2; + camera.top = cameraHeight / 2; + camera.bottom = -cameraHeight / 2; + }, + _updatePan: function (deltaTime) { var velocity = this._panVelocity; var len = this._distance; @@ -34241,15 +33979,6 @@ var OrbitControl = Base.extend(function () { return; } - // FIXME euler order...... - // FIXME alpha is not certain when beta is 90 or -90 - // var euler = new Vector3(); - // euler.eulerFromMat3( - // new Matrix3().fromQuat(this.target.rotation), 'ZYX' - // ); - // euler.eulerFromQuat( - // this.target.rotation.normalize(), 'ZYX' - // ); this.target.updateWorldTransform(); var forward = this.target.worldTransform.z; @@ -34263,6 +33992,9 @@ var OrbitControl = Base.extend(function () { this.setAlpha(this.getAlpha()); this._setDistance(this.target.position.dist(this._center)); + if (!(this.target instanceof Perspective$1)){ + this._setOrthoSize(this.target.top - this.target.bottom); + } }, _mouseDownHandler: function (e) { @@ -34282,12 +34014,10 @@ var OrbitControl = Base.extend(function () { this._processGesture(e, 'start'); } else { - // Left button. - if (e.button === 0) { + if (e.button === MOUSE_BUTTON_KEY_MAP[this.rotateMouseButton]) { this._mode = 'rotate'; } - // Middle button. - else if (e.button === 1) { + else if (e.button === MOUSE_BUTTON_KEY_MAP[this.panMouseButton]) { this._mode = 'pan'; /** @@ -34379,11 +34109,21 @@ var OrbitControl = Base.extend(function () { _zoomHandler: function (e, delta) { - var distance = Math.max(Math.min( - this._distance - this.minDistance, - this.maxDistance - this._distance - )); - this._zoomSpeed = delta * Math.max(distance / 40 * this.zoomSensitivity, 0.2); + var speed; + if (this.target instanceof Perspective$1) { + speed = Math.max(Math.max(Math.min( + this._distance - this.minDistance, + this.maxDistance - this._distance + )) / 20, 0.5); + } + else { + speed = Math.max(Math.max(Math.min( + this._orthoSize - this.minOrthographicSize, + this.maxOrthographicSize - this._orthoSize + )) / 20, 0.5); + } + + this._zoomSpeed = (delta > 0 ? -1 : 1) * speed * this.zoomSensitivity; this._rotating = false; @@ -34474,18 +34214,11 @@ Object.defineProperty(OrbitControl.prototype, 'target', { /** * StaticGeometry can not be changed once they've been setup */ -/** - * @constructor clay.StaticGeometry - * @extends clay.Geometry - */ var StaticGeometry = Geometry.extend({ dynamic: false }); // TODO test -/** - * @namespace clay.util.mesh - */ var meshUtil = { /** * Merge multiple meshes to one. @@ -35393,3 +35126,4 @@ var vr = { }; export { animation, application, async, Camera, camera, compositor, core, createCompositor, deferred, dep, FrameBuffer, Geometry, geometry, GeometryBase, Joint, Light, light, loader, Material, math, BoundingBox, Frustum, Matrix2, Matrix2d, Matrix3, Matrix4, Plane$1 as Plane, Quaternion, Ray, Value, Vector2, Vector3, Vector4, Mesh, Node, particle, picking, plugin, prePass, Renderable, Renderer, Scene, Shader, shader, Skeleton, StandardMaterial, StaticGeometry, Texture, Texture2D, TextureCube, Timeline, util, version, vr }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmVzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuICAgIHZlYzMubm9ybWFsaXplKGF4aXMsYXhpcyk7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShxdWF0MixheGlzLHJhZCk7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dCxvdXQscXVhdDIpO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5hZGQgPSB2ZWM0LmFkZDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLCBhdyA9IGFbM10sXHJcbiAgICAgICAgYnggPSBiWzBdLCBieSA9IGJbMV0sIGJ6ID0gYlsyXSwgYncgPSBiWzNdO1xyXG5cclxuICAgIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XHJcbiAgICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xyXG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lm11bCA9IHF1YXQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc2NhbGUgPSB2ZWM0LnNjYWxlO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuICAgIHF1YXQucm90YXRlQXhpcyhvdXQscXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuICAgIHZhciBxdWF0MiA9WzAsMCwwLDFdO1xyXG4gICAgdmFyIGF4aXMgPSBbMCwwLDFdO1xyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFcgY29tcG9uZW50IG9mIGEgcXVhdCBmcm9tIHRoZSBYLCBZLCBhbmQgWiBjb21wb25lbnRzLlxyXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxyXG4gKiBBbnkgZXhpc3RpbmcgVyBjb21wb25lbnQgd2lsbCBiZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIFcgY29tcG9uZW50IG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gTWF0aC5zcXJ0KE1hdGguYWJzKDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeikpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmRvdCA9IHZlYzQuZG90O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlcnAgPSB2ZWM0LmxlcnA7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgdmFyICAgICAgICBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoIGNvc29tIDwgMC4wICkge1xyXG4gICAgICAgIGNvc29tID0gLWNvc29tO1xyXG4gICAgICAgIGJ4ID0gLSBieDtcclxuICAgICAgICBieSA9IC0gYnk7XHJcbiAgICAgICAgYnogPSAtIGJ6O1xyXG4gICAgICAgIGJ3ID0gLSBidztcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBjb2VmZmljaWVudHNcclxuICAgIGlmICggKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxICkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gXCJmcm9tXCIgYW5kIFwidG9cIiBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIGRvdCA9IGEwKmEwICsgYTEqYTEgKyBhMiphMiArIGEzKmEzLFxyXG4gICAgICAgIGludkRvdCA9IGRvdCA/IDEuMC9kb3QgOiAwO1xyXG5cclxuICAgIC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXHJcblxyXG4gICAgb3V0WzBdID0gLWEwKmludkRvdDtcclxuICAgIG91dFsxXSA9IC1hMSppbnZEb3Q7XHJcbiAgICBvdXRbMl0gPSAtYTIqaW52RG90O1xyXG4gICAgb3V0WzNdID0gYTMqaW52RG90O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBxdWF0XHJcbiAqIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdC5pbnZlcnNlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lmxlbmd0aCA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5sZW4gPSBxdWF0Lmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3F1YXJlZExlbmd0aCA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNxckxlbiA9IHF1YXQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cclxuICpcclxuICogTk9URTogVGhlIHJlc3VsdGFudCBxdWF0ZXJuaW9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyB5b3Ugc2hvdWxkIGJlIHN1cmVcclxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tTWF0MyA9IGZ1bmN0aW9uKG91dCwgbSkge1xyXG4gICAgLy8gQWxnb3JpdGhtIGluIEtlbiBTaG9lbWFrZSdzIGFydGljbGUgaW4gMTk4NyBTSUdHUkFQSCBjb3Vyc2Ugbm90ZXNcclxuICAgIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxyXG4gICAgdmFyIGZUcmFjZSA9IG1bMF0gKyBtWzRdICsgbVs4XTtcclxuICAgIHZhciBmUm9vdDtcclxuXHJcbiAgICBpZiAoIGZUcmFjZSA+IDAuMCApIHtcclxuICAgICAgICAvLyB8d3wgPiAxLzIsIG1heSBhcyB3ZWxsIGNob29zZSB3ID4gMS8yXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgIC8vIDJ3XHJcbiAgICAgICAgb3V0WzNdID0gMC41ICogZlJvb3Q7XHJcbiAgICAgICAgZlJvb3QgPSAwLjUvZlJvb3Q7ICAvLyAxLyg0dylcclxuICAgICAgICBvdXRbMF0gPSAobVs1XS1tWzddKSpmUm9vdDtcclxuICAgICAgICBvdXRbMV0gPSAobVs2XS1tWzJdKSpmUm9vdDtcclxuICAgICAgICBvdXRbMl0gPSAobVsxXS1tWzNdKSpmUm9vdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gfHd8IDw9IDEvMlxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICBpZiAoIG1bNF0gPiBtWzBdIClcclxuICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGlmICggbVs4XSA+IG1baSozK2ldIClcclxuICAgICAgICAgIGkgPSAyO1xyXG4gICAgICAgIHZhciBqID0gKGkrMSklMztcclxuICAgICAgICB2YXIgayA9IChpKzIpJTM7XHJcblxyXG4gICAgICAgIGZSb290ID0gTWF0aC5zcXJ0KG1baSozK2ldLW1baiozK2pdLW1bayozK2tdICsgMS4wKTtcclxuICAgICAgICBvdXRbaV0gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xyXG4gICAgICAgIG91dFszXSA9IChtW2oqMytrXSAtIG1bayozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtqXSA9IChtW2oqMytpXSArIG1baSozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtrXSA9IChtW2sqMytpXSArIG1baSozK2tdKSAqIGZSb290O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBxdWF0OyIsIi8vIFNhbXBsZXIgY2xpcCBpcyBlc3BlY2lhbGx5IGZvciB0aGUgYW5pbWF0aW9uIHNhbXBsZXIgaW4gZ2xURlxyXG4vLyBVc2UgVHlwZWQgQXJyYXkgY2FuIHJlZHVjZSBhIGxvdCBvZiBoZWFwIG1lbW9yeVxyXG5cclxuaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLy8gbGVycCBmdW5jdGlvbiB3aXRoIG9mZnNldCBpbiBsYXJnZSBhcnJheVxyXG5mdW5jdGlvbiB2ZWMzbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgdmFyIGF4ID0gYVtvYV07XHJcbiAgICB2YXIgYXkgPSBhW29hICsgMV07XHJcbiAgICB2YXIgYXogPSBhW29hICsgMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYltvYl0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYltvYiArIDFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbb2IgKyAyXSAtIGF6KTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBxdWF0U2xlcnAob3V0LCBhLCBiLCB0LCBvYSwgb2IpIHtcclxuICAgIC8vIGJlbmNobWFya3M6XHJcbiAgICAvLyAgICBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXNsZXJwLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciBheCA9IGFbMCArIG9hXSwgYXkgPSBhWzEgKyBvYV0sIGF6ID0gYVsyICsgb2FdLCBhdyA9IGFbMyArIG9hXSxcclxuICAgICAgICBieCA9IGJbMCArIG9iXSwgYnkgPSBiWzEgKyBvYl0sIGJ6ID0gYlsyICsgb2JdLCBidyA9IGJbMyArIG9iXTtcclxuXHJcbiAgICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7XHJcblxyXG4gICAgLy8gY2FsYyBjb3NpbmVcclxuICAgIGNvc29tID0gYXggKiBieCArIGF5ICogYnkgKyBheiAqIGJ6ICsgYXcgKiBidztcclxuICAgIC8vIGFkanVzdCBzaWducyAoaWYgbmVjZXNzYXJ5KVxyXG4gICAgaWYgKGNvc29tIDwgMC4wKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCgxLjAgLSBjb3NvbSkgPiAwLjAwMDAwMSkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vICdmcm9tJyBhbmQgJ3RvJyBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTYW1wbGVyVHJhY2sgbWFuYWdlcyBgcG9zaXRpb25gLCBgcm90YXRpb25gLCBgc2NhbGVgIHRyYWNrcyBpbiBhbmltYXRpb24gb2Ygc2luZ2xlIHNjZW5lIG5vZGUuXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdIFRyYWNrIG5hbWVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtvcHRzLnRhcmdldF0gVGFyZ2V0IG5vZGUncyB0cmFuc2Zvcm0gd2lsbCB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcclxuICovXHJcbnZhciBTYW1wbGVyVHJhY2sgPSBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldCB8fCBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9zaXRpb24gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yb3RhdGlvbiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcclxuXHJcbiAgICB0aGlzLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IG51bGwsXHJcbiAgICAgICAgcG9zaXRpb246IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIga2V5ID0gLTE7XHJcbiAgICAvLyBPbmx5IG9uZSBmcmFtZVxyXG4gICAgaWYgKGxlbiA9PT0gMSkge1xyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0LmNvcHkodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENsYW1wXHJcbiAgICBlbHNlIGlmICh0aW1lIDw9IGNoYW5uZWxzLnRpbWVbMF0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVswXTtcclxuICAgICAgICBrZXkgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGltZSA+PSBjaGFubmVscy50aW1lW2xlbiAtIDFdKSB7XHJcbiAgICAgICAgdGltZSA9IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV07XHJcbiAgICAgICAga2V5ID0gbGVuIC0gMjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aW1lIDwgdGhpcy5fY2FjaGVUaW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBzID0gTWF0aC5taW4obGVuIC0gMSwgdGhpcy5fY2FjaGVLZXkgKyAxKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbHMudGltZVtpIC0gMV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2ldID4gdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGkgLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2FjaGVLZXk7IGkgPCBsZW4gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpICsgMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0ga2V5O1xyXG4gICAgICAgIHZhciBlbmQgPSBrZXkgKyAxO1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbZW5kXTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gcmFuZ2UgPT09IDAgPyAwIDogKHRpbWUgLSBzdGFydFRpbWUpIC8gcmFuZ2U7XHJcblxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0U2xlcnAodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIGNoYW5uZWxzLnJvdGF0aW9uLCBwZXJjZW50LCBzdGFydCAqIDQsIGVuZCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIExvb3AgaGFuZGxpbmdcclxuICAgIGlmIChrZXkgPT09IGxlbiAtIDIpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSB0cmFuc2Zvcm0gb2YgdGFyZ2V0IG5vZGUgbWFudWFsbHlcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUudXBkYXRlVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRhcmdldCBwcm9wIGlmIGhhdmUgZGF0YS5cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zaXRpb24uc2V0QXJyYXkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5yb3RhdGlvbi5zZXRBcnJheSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNjYWxlLnNldEFycmF5KHRoaXMuc2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFubmVscy50aW1lW3RoaXMuY2hhbm5lbHMudGltZS5sZW5ndGggLSAxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0U3ViVHJhY2sgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKSB7XHJcblxyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG4gICAgdmFyIG1pblRpbWUgPSB0aGlzLmNoYW5uZWxzLnRpbWVbMF07XHJcbiAgICBzdGFydFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG4gICAgZW5kVGltZSA9IE1hdGgubWluKE1hdGgubWF4KGVuZFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIHZhciByYW5nZVN0YXJ0ID0gdGhpcy5fZmluZFJhbmdlKHN0YXJ0VGltZSk7XHJcbiAgICB2YXIgcmFuZ2VFbmQgPSB0aGlzLl9maW5kUmFuZ2UoZW5kVGltZSk7XHJcblxyXG4gICAgdmFyIGNvdW50ID0gcmFuZ2VFbmRbMF0gLSByYW5nZVN0YXJ0WzBdICsgMTtcclxuICAgIGlmIChyYW5nZVN0YXJ0WzFdID09PSAwICYmIHJhbmdlRW5kWzFdID09PSAwKSB7XHJcbiAgICAgICAgY291bnQgLT0gMTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiA0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnRpbWUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWUgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50KTtcclxuICAgIH1cclxuICAgIC8vIENsaXAgYXQgdGhlIHN0YXJ0XHJcbiAgICB0aGlzLnNldFRpbWUoc3RhcnRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbMF0gPSAwO1xyXG4gICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblszXSA9IHRoaXMucm90YXRpb25bM107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjb3VudC0xOyBpKyspIHtcclxuICAgICAgICB2YXIgaTI7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgaTIgPSByYW5nZVN0YXJ0WzBdICsgaTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpICogNCArIGpdID0gdGhpcy5jaGFubmVscy5yb3RhdGlvbltpMiAqIDQgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5wb3NpdGlvbltpMiAqIDMgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5zY2FsZVtpMiAqIDMgKyBqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy50aW1lW2ldID0gdGhpcy5jaGFubmVscy50aW1lW2kyXSAtIHN0YXJ0VGltZTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgM10gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIDNdO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgZW5kXHJcbiAgICB0aGlzLnNldFRpbWUoZW5kVGltZSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgaV0gPSB0aGlzLnJvdGF0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucG9zaXRpb25bKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnBvc2l0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMuc2NhbGVbKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnNjYWxlW2ldO1xyXG4gICAgfVxyXG4gICAgc3ViQ2xpcC5jaGFubmVscy50aW1lWyhjb3VudCAtIDEpXSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIDNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICAvLyBUT0RPIHNldCBiYWNrID9cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuX2ZpbmRSYW5nZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgdmFyIGxlbiA9IGNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgdmFyIHN0YXJ0ID0gLTE7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpKzFdID4gdGltZSkge1xyXG4gICAgICAgICAgICBzdGFydCA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHBlcmNlbnQgPSAwO1xyXG4gICAgaWYgKHN0YXJ0ID49IDApIHtcclxuICAgICAgICB2YXIgc3RhcnRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydF07XHJcbiAgICAgICAgdmFyIGVuZFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0KzFdO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gKHRpbWUtc3RhcnRUaW1lKSAvIChlbmRUaW1lLXN0YXJ0VGltZSk7XHJcbiAgICB9XHJcbiAgICAvLyBQZXJjZW50IFswLCAxKVxyXG4gICAgcmV0dXJuIFtzdGFydCwgcGVyY2VudF07XHJcbn07XHJcblxyXG4vKipcclxuICogMUQgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uICh0MSwgdDIsIHcpIHtcclxuICAgIHZlYzMubGVycCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24sIHcpO1xyXG4gICAgdmVjMy5sZXJwKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSwgdyk7XHJcbiAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdyk7XHJcbn07XHJcbi8qKlxyXG4gKiAyRCBibGVuZGluZyBiZXR3ZWVuIHRocmVlIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmJsZW5kMkQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHExID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHZhciBxMiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHQxLCB0MiwgdDMsIGYsIGcpIHtcclxuICAgICAgICB2YXIgYSA9IDEgLSBmIC0gZztcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblswXSA9IHQxLnBvc2l0aW9uWzBdICogYSArIHQyLnBvc2l0aW9uWzBdICogZiArIHQzLnBvc2l0aW9uWzBdICogZztcclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzFdID0gdDEucG9zaXRpb25bMV0gKiBhICsgdDIucG9zaXRpb25bMV0gKiBmICsgdDMucG9zaXRpb25bMV0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMl0gPSB0MS5wb3NpdGlvblsyXSAqIGEgKyB0Mi5wb3NpdGlvblsyXSAqIGYgKyB0My5wb3NpdGlvblsyXSAqIGc7XHJcblxyXG4gICAgICAgIHRoaXMuc2NhbGVbMF0gPSB0MS5zY2FsZVswXSAqIGEgKyB0Mi5zY2FsZVswXSAqIGYgKyB0My5zY2FsZVswXSAqIGc7XHJcbiAgICAgICAgdGhpcy5zY2FsZVsxXSA9IHQxLnNjYWxlWzFdICogYSArIHQyLnNjYWxlWzFdICogZiArIHQzLnNjYWxlWzFdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzJdID0gdDEuc2NhbGVbMl0gKiBhICsgdDIuc2NhbGVbMl0gKiBmICsgdDMuc2NhbGVbMl0gKiBnO1xyXG5cclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiMjA1NDAzKHY9dnMuODUpLmFzcHhcclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21pY3Jvc29mdC5kaXJlY3R4X3Nkay5xdWF0ZXJuaW9uLnhtcXVhdGVybmlvbmJhcnljZW50cmljKHY9dnMuODUpLmFzcHhcclxuICAgICAgICB2YXIgcyA9IGYgKyBnO1xyXG4gICAgICAgIGlmIChzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHExLCB0MS5yb3RhdGlvbiwgdDIucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHEyLCB0MS5yb3RhdGlvbiwgdDMucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHExLCBxMiwgZyAvIHMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmFkZGl0aXZlQmxlbmQgPSBmdW5jdGlvbiAodDEsIHQyKSB7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24pO1xyXG4gICAgdmVjMy5hZGQodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlKTtcclxuICAgIHF1YXQubXVsdGlwbHkodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuLyoqXHJcbiAqIFN1YnRyYWN0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuc3ViKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLnN1Yih0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5pbnZlcnQodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24pO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgU2FtcGxlclRyYWNrXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdHJhY2sgPSBTYW1wbGVyVHJhY2sucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICB0cmFjay5jaGFubmVscyA9IHtcclxuICAgICAgICB0aW1lOiB0aGlzLmNoYW5uZWxzLnRpbWUgfHwgbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogdGhpcy5jaGFubmVscy5wb3NpdGlvbiB8fCBudWxsLFxyXG4gICAgICAgIHJvdGF0aW9uOiB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IHRoaXMuY2hhbm5lbHMuc2NhbGUgfHwgbnVsbFxyXG4gICAgfTtcclxuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICBxdWF0LmNvcHkodHJhY2sucm90YXRpb24sIHRoaXMucm90YXRpb24pO1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnNjYWxlLCB0aGlzLnNjYWxlKTtcclxuXHJcbiAgICB0cmFjay50YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgIHRyYWNrLnVwZGF0ZVRhcmdldCgpO1xyXG5cclxuICAgIHJldHVybiB0cmFjaztcclxuXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTYW1wbGVyVHJhY2s7XHJcbiIsIi8qKlxyXG4gKiBFeHRlbmQgYSBzdWIgY2xhc3MgZnJvbSBiYXNlIGNsYXNzXHJcbiAqIEBwYXJhbSB7b2JqZWN0fEZ1bmN0aW9ufSBtYWtlRGVmYXVsdE9wdCBkZWZhdWx0IG9wdGlvbiBvZiB0aGlzIHN1YiBjbGFzcywgbWV0aG9kIG9mIHRoZSBzdWIgY2FuIHVzZSB0aGlzLnh4eCB0byBhY2Nlc3MgdGhpcyBvcHRpb25cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVdIEluaXRpYWxpemUgYWZ0ZXIgdGhlIHN1YiBjbGFzcyBpcyBpbnN0YW50aWF0ZWRcclxuICogQHBhcmFtIHtPYmplY3R9IFtwcm90b10gUHJvdG90eXBlIG1ldGhvZHMvcHJvcGVydGllcyBvZiB0aGUgc3ViIGNsYXNzXHJcbiAqIEBtZW1iZXJPZiBjbGF5LmNvcmUubWl4aW4uZXh0ZW5kXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gZGVyaXZlKG1ha2VEZWZhdWx0T3B0LCBpbml0aWFsaXplLypvcHRpb25hbCovLCBwcm90by8qb3B0aW9uYWwqLykge1xyXG5cclxuICAgIGlmICh0eXBlb2YgaW5pdGlhbGl6ZSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHByb3RvID0gaW5pdGlhbGl6ZTtcclxuICAgICAgICBpbml0aWFsaXplID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgX3N1cGVyID0gdGhpcztcclxuXHJcbiAgICB2YXIgcHJvcExpc3Q7XHJcbiAgICBpZiAoIShtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xyXG4gICAgICAgIC8vIE9wdGltaXplIHRoZSBwcm9wZXJ0eSBpdGVyYXRlIGlmIGl0IGhhdmUgYmVlbiBmaXhlZFxyXG4gICAgICAgIHByb3BMaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gbWFrZURlZmF1bHRPcHQpIHtcclxuICAgICAgICAgICAgaWYgKG1ha2VEZWZhdWx0T3B0Lmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcExpc3QucHVzaChwcm9wTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHN1YiA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgLy8gY2FsbCBzdXBlciBjb25zdHJ1Y3RvclxyXG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAvLyBJbnZva2UgbWFrZURlZmF1bHRPcHQgZWFjaCB0aW1lIGlmIGl0IGlzIGEgZnVuY3Rpb24sIFNvIHdlIGNhbiBtYWtlIHN1cmUgZWFjaFxyXG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIHNoYXJlZCBieSBtdXRpcGxlIGluc3RhbmNlc1xyXG4gICAgICAgICAgICBleHRlbmQodGhpcywgbWFrZURlZmF1bHRPcHQuY2FsbCh0aGlzLCBvcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBleHRlbmRXaXRoUHJvcExpc3QodGhpcywgbWFrZURlZmF1bHRPcHQsIHByb3BMaXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBzdWIpIHtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgb2YgaW5oZXJpdFxyXG4gICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJzID0gc3ViLl9faW5pdGlhbGl6ZXJzX187XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBzYXZlIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICBzdWIuX19zdXBlcl9fID0gX3N1cGVyO1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgdGhlIHN1cGVyIGNvbnN0cnVjdG9yIGlzIGNhbGxlZFxyXG4gICAgaWYgKCFfc3VwZXIuX19pbml0aWFsaXplcnNfXykge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gX3N1cGVyLl9faW5pdGlhbGl6ZXJzX18uc2xpY2UoKTtcclxuICAgIH1cclxuICAgIGlmIChpbml0aWFsaXplKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18ucHVzaChpbml0aWFsaXplKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCkge307XHJcbiAgICBDdG9yLnByb3RvdHlwZSA9IF9zdXBlci5wcm90b3R5cGU7XHJcbiAgICBzdWIucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuICAgIHN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWI7XHJcbiAgICBleHRlbmQoc3ViLnByb3RvdHlwZSwgcHJvdG8pO1xyXG5cclxuICAgIC8vIGV4dGVuZCB0aGUgZGVyaXZlIG1ldGhvZCBhcyBhIHN0YXRpYyBtZXRob2Q7XHJcbiAgICBzdWIuZXh0ZW5kID0gX3N1cGVyLmV4dGVuZDtcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIHN1Yi5kZXJpdmUgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIHJldHVybiBzdWI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kV2l0aFByb3BMaXN0KHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQG1peGluXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblxyXG4gICAgZXh0ZW5kOiBkZXJpdmUsXHJcblxyXG4gICAgLy8gREVQQ1JBVEVEXHJcbiAgICBkZXJpdmU6IGRlcml2ZVxyXG59O1xyXG4iLCJmdW5jdGlvbiBIYW5kbGVyKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG59XHJcbi8qKlxyXG4gKiBAbWl4aW5cclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIG5vdGlmaWVyID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgdHJpZ2dlcjogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19oYW5kbGVyc19fJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX19oYW5kbGVyc19fLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoZGxzID0gdGhpcy5fX2hhbmRsZXJzX19bbmFtZV07XHJcbiAgICAgICAgdmFyIGwgPSBoZGxzLmxlbmd0aCwgaSA9IC0xLCBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIC8vIE9wdGltaXplIGFkdmlzZSBmcm9tIGJhY2tib25lXHJcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmFwcGx5KGhkbHNbaV0uY29udGV4dCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuICAgICAgICBpZiAoIWhhbmRsZXJzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXJzW25hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXMobmFtZSwgYWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0IHx8IHRoaXMpO1xyXG4gICAgICAgIGhhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50LCBldmVudCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIG9uY2UgYW5kIHRoZW4gcmVtb3ZlZFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbmNlOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xyXG4gICAgICAgICAgICBzZWxmLm9mZihuYW1lLCB3cmFwcGVyKTtcclxuICAgICAgICAgICAgYWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIHdyYXBwZXIsIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2JlZm9yZScgKyBuYW1lKVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBiZWZvcmU6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdiZWZvcmUnICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2FmdGVyJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGFmdGVyOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5hbWUgPSAnYWZ0ZXInICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdzdWNjZXNzJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uY2UoJ3N1Y2Nlc3MnLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdlcnJvcicpXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBlcnJvcjogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnZXJyb3InLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lclxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb2ZmOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuXHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuXHJcbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdmFyIGhkbHMgPSBoYW5kbGVyc1tuYW1lXTtcclxuICAgICAgICAgICAgdmFyIHJldGFpbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uICYmIGhkbHNbaV0uYWN0aW9uICE9PSBhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRhaW5zLnB1c2goaGRsc1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSByZXRhaW5zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcmVnaXN0ZXJlZCB0aGUgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259ICBhY3Rpb25cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhczogZnVuY3Rpb24obmFtZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX187XHJcblxyXG4gICAgICAgIGlmICghIGhhbmRsZXJzIHx8XHJcbiAgICAgICAgICAgICEgaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGRscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaGRsc1tpXS5hY3Rpb24gPT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBub3RpZmllcjsiLCJ2YXIgZ3VpZCA9IDA7XHJcblxyXG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcclxudmFyIG5hdGl2ZUZvckVhY2ggPSBBcnJheVByb3RvLmZvckVhY2g7XHJcblxyXG4vKipcclxuICogVXRpbCBmdW5jdGlvbnNcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUudXRpbFxyXG4gKi9cclxudmFyIHV0aWwgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBHVUlEXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZ2VuR1VJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiArK2d1aWQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWxhdGl2ZSBwYXRoIHRvIGFic29sdXRlIHBhdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBiYXNlUGF0aFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIHJlbGF0aXZlMmFic29sdXRlOiBmdW5jdGlvbiAocGF0aCwgYmFzZVBhdGgpIHtcclxuICAgICAgICBpZiAoIWJhc2VQYXRoIHx8IHBhdGgubWF0Y2goL15cXC8vKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhdGhQYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgYmFzZVBhdGhQYXJ0cyA9IGJhc2VQYXRoLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgIHZhciBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIHdoaWxlKGl0ZW0gPT09ICcuJyB8fCBpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlUGF0aFBhcnRzLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGhQYXJ0cy5zaGlmdCgpO1xyXG4gICAgICAgICAgICBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYmFzZVBhdGhQYXJ0cy5qb2luKCcvJykgKyAnLycgKyBwYXRoUGFydHMuam9pbignLycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCB0YXJnZXQgd2l0aCBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGV4dGVuZDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHNvdXJjZVtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0czogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGxpc3QgdG8gYXZvaWQgZm9yLi5pbi4uIGl0ZXJhdGlvbi5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHByb3BMaXN0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB0byB0YXJnZXQgaWYgbm90IGV4aXN0LiBXaXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0c1dpdGhQcm9wTGlzdDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0W3Byb3BOYW1lXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gb2JqXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZWFjaDogZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIShvYmogJiYgaXRlcmF0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iai5mb3JFYWNoICYmIG9iai5mb3JFYWNoID09PSBuYXRpdmVGb3JFYWNoKSB7XHJcbiAgICAgICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqID09PSBPYmplY3Qob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSA/XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgYXJyYXkgbGlrZSwgd2hpY2ggaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7fSAgb2JqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGlzQXJyYXlMaWtlOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5sZW5ndGggPT09ICsgb2JqLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7fSBvYmpcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGlmICghdXRpbC5pc09iamVjdChvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHV0aWwuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5TGlrZShvYmopKSB7IC8vIGlzIHR5cGVkIGFycmF5XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKG9iai5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0W2ldID0gb2JqW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5leHRlbmQoe30sIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXRpbDtcclxuIiwiaW1wb3J0IGV4dGVuZE1peGluIGZyb20gJy4vbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyTWl4aW4gZnJvbSAnLi9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbCc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBvZiBhbGwgb2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbnZhciBCYXNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9fdWlkX18gPSB1dGlsLmdlbkdVSUQoKTtcclxufTtcclxuXHJcbkJhc2UuX19pbml0aWFsaXplcnNfXyA9IFtcclxuICAgIGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgdXRpbC5leHRlbmQodGhpcywgb3B0cyk7XHJcbiAgICB9XHJcbl07XHJcblxyXG51dGlsLmV4dGVuZChCYXNlLCBleHRlbmRNaXhpbik7XHJcbnV0aWwuZXh0ZW5kKEJhc2UucHJvdG90eXBlLCBub3RpZmllck1peGluKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2U7XHJcbiIsImZ1bmN0aW9uIGdldChvcHRpb25zKSB7XHJcblxyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG5cclxuICAgIHhoci5vcGVuKCdnZXQnLCBvcHRpb25zLnVybCk7XHJcbiAgICAvLyBXaXRoIHJlc3BvbnNlIHR5cGUgc2V0IGJyb3dzZXIgY2FuIGdldCBhbmQgcHV0IGJpbmFyeSBkYXRhXHJcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9TZW5kaW5nX2FuZF9SZWNlaXZpbmdfQmluYXJ5X0RhdGFcclxuICAgIC8vIERlZmF1bHQgaXMgdGV4dCwgYW5kIGl0IGNhbiBiZSBzZXRcclxuICAgIC8vIGFycmF5YnVmZmVyLCBibG9iLCBkb2N1bWVudCwganNvbiwgdGV4dFxyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcclxuXHJcbiAgICBpZiAob3B0aW9ucy5vbnByb2dyZXNzKSB7XHJcbiAgICAgICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdFxyXG4gICAgICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IGUubG9hZGVkIC8gZS50b3RhbDtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhwZXJjZW50LCBlLmxvYWRlZCwgZS50b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9ucHJvZ3Jlc3MobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSA0MDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmVycm9yICYmIG9wdGlvbnMub25lcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQgJiYgb3B0aW9ucy5vbmxvYWQoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdGlvbnMub25lcnJvcikge1xyXG4gICAgICAgIHhoci5vbmVycm9yID0gb3B0aW9ucy5vbmVycm9yO1xyXG4gICAgfVxyXG4gICAgeGhyLnNlbmQobnVsbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGdldDogZ2V0XHJcbn07XHJcbiIsImltcG9ydCByZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XHJcblxyXG52YXIgc3VwcG9ydFdlYkdMO1xyXG5cclxudmFyIHZlbmRvciA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIElmIHN1cHBvcnQgV2ViR0xcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcbnZlbmRvci5zdXBwb3J0V2ViR0wgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoc3VwcG9ydFdlYkdMID09IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcclxuICAgICAgICAgICAgaWYgKCFnbCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgc3VwcG9ydFdlYkdMID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBzdXBwb3J0V2ViR0w7XHJcbn07XHJcblxyXG52ZW5kb3IuSW50OEFycmF5ID0gdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDhBcnJheTtcclxuXHJcbnZlbmRvci5VaW50OEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQxNkFycmF5ID0gdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogVWludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDMyQXJyYXkgPSB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MzJBcnJheTtcclxuXHJcbnZlbmRvci5JbnQxNkFycmF5ID0gdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBJbnQxNkFycmF5O1xyXG5cclxudmVuZG9yLkZsb2F0MzJBcnJheSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBGbG9hdDMyQXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQ2NEFycmF5ID0gdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0NjRBcnJheTtcclxuXHJcbnZhciBnID0ge307XHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IHdpbmRvdztcclxufVxyXG5lbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IGdsb2JhbDtcclxufVxyXG5cclxuXHJcbnZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnLnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGcud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBmdW5jdGlvbiAoZnVuYyl7IHNldFRpbWVvdXQoZnVuYywgMTYpOyB9O1xyXG5cclxudmVuZG9yLmNyZWF0ZUNhbnZhcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxufTtcclxuXHJcbnZlbmRvci5jcmVhdGVJbWFnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBuZXcgZy5JbWFnZSgpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlcXVlc3QgPSB7XHJcbiAgICBnZXQ6IHJlcXVlc3QuZ2V0XHJcbn07XHJcblxyXG52ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpIHtcclxuICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZG9tLCB0eXBlLCBmdW5jKSB7XHJcbiAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHZlbmRvcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgQW5pbWF0b3IgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBbmltYXRpb24gaXMgZ2xvYmFsIHRpbWVsaW5lIHRoYXQgc2NoZWR1bGUgYWxsIGNsaXBzLiBlYWNoIGZyYW1lIGFuaW1hdGlvbiB3aWxsIHNldCB0aGUgdGltZSBvZiBjbGlwcyB0byBjdXJyZW50IGFuZCB1cGRhdGUgdGhlIHN0YXRlcyBvZiBjbGlwc1xyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UaW1lbGluZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgYW5pbWF0aW9uID0gbmV3IGNsYXkuVGltZWxpbmUoKTtcclxuICogdmFyIG5vZGUgPSBuZXcgY2xheS5Ob2RlKCk7XHJcbiAqIGFuaW1hdGlvbi5hbmltYXRlKG5vZGUucG9zaXRpb24pXHJcbiAqICAgICAud2hlbigxMDAwLCB7XHJcbiAqICAgICAgICAgeDogNTAwLFxyXG4gKiAgICAgICAgIHk6IDUwMFxyXG4gKiAgICAgfSlcclxuICogICAgIC53aGVuKDIwMDAsIHtcclxuICogICAgICAgICB4OiAxMDAsXHJcbiAqICAgICAgICAgeTogMTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMzAwMCwge1xyXG4gKiAgICAgICAgIHo6IDEwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLnN0YXJ0KCdzcGxpbmUnKTtcclxuICovXHJcbnZhciBUaW1lbGluZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGltZWxpbmUjICove1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHN0YWdlIGlzIGFuIG9iamVjdCB3aXRoIHJlbmRlciBtZXRob2QsIGVhY2ggZnJhbWUgaWYgdGhlcmUgZXhpc3RzIGFueSBhbmltYXRpbmcgY2xpcHMsIHN0YWdlLnJlbmRlciB3aWxsIGJlIGNhbGxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3RhZ2U6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIF9ydW5uaW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3RpbWU6IDAsXHJcblxyXG4gICAgICAgIF9wYXVzZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcGF1c2VkVGltZTogMFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRpbWVsaW5lLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxyXG4gICAgICovXHJcbiAgICBhZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBjbGlwXHJcbiAgICAgKi9cclxuICAgIGFkZENsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzLmluZGV4T2YoY2xpcCkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZWRUaW1lO1xyXG4gICAgICAgIHZhciBkZWx0YSA9IHRpbWUgLSB0aGlzLl90aW1lO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IHRoaXMuX2NsaXBzO1xyXG4gICAgICAgIHZhciBsZW4gPSBjbGlwcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBkZWZlcnJlZEV2ZW50cyA9IFtdO1xyXG4gICAgICAgIHZhciBkZWZlcnJlZENsaXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2xpcCA9IGNsaXBzW2ldO1xyXG4gICAgICAgICAgICB2YXIgZSA9IGNsaXAuc3RlcCh0aW1lLCBkZWx0YSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBUaHJvdyBvdXQgdGhlIGV2ZW50cyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlclxyXG4gICAgICAgICAgICAvLyBzdGFnZS5yZW5kZXIsIGxpa2UgZmluaXNoXHJcbiAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZEV2ZW50cy5wdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWRDbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGZpbmlzaGVkIGNsaXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGNsaXBzW2ldLl9uZWVkc1JlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgY2xpcHNbaV0gPSBjbGlwc1tsZW4tMV07XHJcbiAgICAgICAgICAgICAgICBjbGlwcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZW4gPSBkZWZlcnJlZEV2ZW50cy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBkZWZlcnJlZENsaXBzW2ldLmZpcmUoZGVmZXJyZWRFdmVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGltZSA9IHRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignZnJhbWUnLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YWdlICYmIHRoaXMuc3RhZ2UucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UucmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3RpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICB0aGlzLl9wYXVzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAoKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9ydW5uaW5nKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghc2VsZi5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIHJ1bm5pbmcgYW5pbWF0aW9uXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VcclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZVN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkVGltZSArPSBEYXRlLm5vdygpIC0gdGhpcy5fcGF1c2VTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGFuIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb25zLmxvb3BdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuZ2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNldHRlcl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5pbnRlcnBvbGF0ZXJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBhbmltYXRvciA9IG5ldyBBbmltYXRvcihcclxuICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICBvcHRpb25zLmxvb3AsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZ2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLnNldHRlcixcclxuICAgICAgICAgICAgb3B0aW9ucy5pbnRlcnBvbGF0ZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGFuaW1hdG9yLmFuaW1hdGlvbiA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuLi9UaW1lbGluZSc7XHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lOyIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEFuaW1hdGlvbiBjbGlwIHRoYXQgbWFuYWdlIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtBcnJheS48Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrPn0gW29wdHMudHJhY2tzXVxyXG4gKi9cclxudmFyIFRyYWNrQ2xpcCA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgQ2xpcC5jYWxsKHRoaXMsIG9wdHMpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmFja3MgPSBvcHRzLnRyYWNrcyB8fCBbXTtcclxuXHJcbiAgICB0aGlzLmNhbGNMaWZlRnJvbVRyYWNrcygpO1xyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xpcC5wcm90b3R5cGUpO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYWNrQ2xpcDtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XHJcblxyXG4gICAgdmFyIHJldCA9IENsaXAucHJvdG90eXBlLnN0ZXAuY2FsbCh0aGlzLCB0aW1lLCBkVGltZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcclxuICAgICAgICAvLyBUT0RPIGxpZmUgbWF5IGJlIGNoYW5nZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JhbmdlKSB7XHJcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9yYW5nZVswXSArIHRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmFuZ2VcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0UmFuZ2UgPSBmdW5jdGlvbiAocmFuZ2UpIHtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlO1xyXG4gICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgcmFuZ2VbMV0gPSBNYXRoLm1pbihyYW5nZVsxXSwgdGhpcy5saWZlKTtcclxuICAgICAgICByYW5nZVswXSA9IE1hdGgubWluKHJhbmdlWzBdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHRoaXMubGlmZSA9IChyYW5nZVsxXSAtIHJhbmdlWzBdKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy50cmFja3NbaV0uc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY2FsY0xpZmVGcm9tVHJhY2tzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5saWZlID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmxpZmUgPSBNYXRoLm1heCh0aGlzLmxpZmUsIHRoaXMudHJhY2tzW2ldLmdldE1heFRpbWUoKSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmFkZFRyYWNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB0aGlzLnRyYWNrcy5wdXNoKHRyYWNrKTtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnJlbW92ZVRhcmNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB2YXIgaWR4ID0gdGhpcy50cmFja3MuaW5kZXhPZih0cmFjayk7XHJcbiAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICB0aGlzLnRyYWNrcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb29wXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH1cclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuZ2V0U3ViQ2xpcCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlzTG9vcCkge1xyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ViVHJhY2sgPSB0aGlzLnRyYWNrc1tpXS5nZXRTdWJUcmFjayhzdGFydFRpbWUsIGVuZFRpbWUpO1xyXG4gICAgICAgIHN1YkNsaXAuYWRkVHJhY2soc3ViVHJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0xvb3AgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1YkNsaXAuc2V0TG9vcChpc0xvb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcblxyXG4gICAgcmV0dXJuIHN1YkNsaXA7XHJcbn07XHJcblxyXG4vKipcclxuICogMWQgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgdykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmJsZW5kMUQoYzEsIGMyLCB3KTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5hZGRpdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnN1YnRyYWN0aXZlQmxlbmQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuc3VidHJhY3RpdmVCbGVuZChjMSwgYzIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGZyb20gdGhyZWUgc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDNcclxuICogQHBhcmFtICB7bnVtYmVyfSBmXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZ1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDJEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgY2xpcDMsIGYsIGcpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMyA9IGNsaXAzLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQyRChjMSwgYzIsIGMzLCBmLCBnKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IFNSVCBvZiBhbGwgam9pbnRzIGNsaXBzIGZyb20gYW5vdGhlciBUcmFja0NsaXBcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzVHJhY2sgPSBjbGlwLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdFRyYWNrID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHZlYzMuY29weSh0VHJhY2sucG9zaXRpb24sIHNUcmFjay5wb3NpdGlvbik7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5zY2FsZSwgc1RyYWNrLnNjYWxlKTtcclxuICAgICAgICBxdWF0LmNvcHkodFRyYWNrLnJvdGF0aW9uLCBzVHJhY2sucm90YXRpb24pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjbGlwLmFkZFRyYWNrKHRoaXMudHJhY2tzW2ldLmNsb25lKCkpO1xyXG4gICAgfVxyXG4gICAgY2xpcC5saWZlID0gdGhpcy5saWZlO1xyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUcmFja0NsaXA7XHJcbiIsInZhciBFWFRFTlNJT05fTElTVCA9IFtcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicsXHJcbiAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICdPRVNfdmVydGV4X2FycmF5X29iamVjdCcsXHJcbiAgICAnT0VTX2VsZW1lbnRfaW5kZXhfdWludCcsXHJcbiAgICAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnLFxyXG4gICAgJ1dFQkdMX2RlcHRoX3RleHR1cmUnLFxyXG4gICAgJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycsXHJcbiAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcsXHJcbiAgICAnV0VCR0xfZHJhd19idWZmZXJzJyxcclxuICAgICdFWFRfZnJhZ19kZXB0aCcsXHJcbiAgICAnRVhUX3NSR0InXHJcbl07XHJcblxyXG52YXIgUEFSQU1FVEVSX05BTUVTID0gW1xyXG4gICAgJ01BWF9URVhUVVJFX1NJWkUnLFxyXG4gICAgJ01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUnXHJcbl07XHJcblxyXG5mdW5jdGlvbiBHTEluZm8oX2dsKSB7XHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9O1xyXG4gICAgdmFyIHBhcmFtZXRlcnMgPSB7fTtcclxuXHJcbiAgICAvLyBHZXQgd2ViZ2wgZXh0ZW5zaW9uXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEVYVEVOU0lPTl9MSVNULmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGV4dE5hbWUgPSBFWFRFTlNJT05fTElTVFtpXTtcclxuICAgICAgICBjcmVhdGVFeHRlbnNpb24oZXh0TmFtZSk7XHJcbiAgICB9XHJcbiAgICAvLyBHZXQgcGFyYW1ldGVyc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBQQVJBTUVURVJfTkFNRVMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IFBBUkFNRVRFUl9OQU1FU1tpXTtcclxuICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gX2dsLmdldFBhcmFtZXRlcihfZ2xbbmFtZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0RXh0ZW5zaW9uID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBpZiAoIShuYW1lIGluIGV4dGVuc2lvbnMpKSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZUV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnNbbmFtZV07XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRNYXhKb2ludE51bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gMTU7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKF9nbC5nZXRFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgdmFyIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnNbbmFtZV0gPSBleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTEluZm87XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5nbGVudW1cclxuICogQHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8xLjAvIzUuMTRcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8qIENsZWFyQnVmZmVyTWFzayAqL1xyXG4gICAgREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDogMHgwMDAwMDEwMCxcclxuICAgIFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA6IDB4MDAwMDA0MDAsXHJcbiAgICBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDA0MDAwLFxyXG5cclxuICAgIC8qIEJlZ2luTW9kZSAqL1xyXG4gICAgUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAwLFxyXG4gICAgTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAxLFxyXG4gICAgTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAyLFxyXG4gICAgTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAzLFxyXG4gICAgVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDA0LFxyXG4gICAgVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDogMHgwMDA1LFxyXG4gICAgVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgIDogMHgwMDA2LFxyXG5cclxuICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi9cclxuICAgIC8qICAgICAgTkVWRVIgKi9cclxuICAgIC8qICAgICAgTEVTUyAqL1xyXG4gICAgLyogICAgICBFUVVBTCAqL1xyXG4gICAgLyogICAgICBMRVFVQUwgKi9cclxuICAgIC8qICAgICAgR1JFQVRFUiAqL1xyXG4gICAgLyogICAgICBOT1RFUVVBTCAqL1xyXG4gICAgLyogICAgICBHRVFVQUwgKi9cclxuICAgIC8qICAgICAgQUxXQVlTICovXHJcblxyXG4gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovXHJcbiAgICBaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG4gICAgT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSxcclxuICAgIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMCxcclxuICAgIE9ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICA6IDB4MDMwMSxcclxuICAgIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMixcclxuICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA6IDB4MDMwMyxcclxuICAgIERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwNCxcclxuICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA6IDB4MDMwNSxcclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICAvKiAgICAgIE9ORSAqL1xyXG4gICAgRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA2LFxyXG4gICAgT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDogMHgwMzA3LFxyXG4gICAgU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgIDogMHgwMzA4LFxyXG4gICAgLyogICAgICBTUkNfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBEU1RfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqL1xyXG5cclxuICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqL1xyXG4gICAgRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MDA2LFxyXG4gICAgQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDogMHg4MDA5LFxyXG4gICAgQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgIDogMHg4MDA5LCAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovXHJcbiAgICBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgOiAweDg4M0QsXHJcblxyXG4gICAgLyogQmxlbmRTdWJ0cmFjdCAqL1xyXG4gICAgRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgIDogMHg4MDBBLFxyXG4gICAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgIDogMHg4MDBCLFxyXG5cclxuICAgIC8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqL1xyXG4gICAgQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM4LFxyXG4gICAgQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM5LFxyXG4gICAgQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENBLFxyXG4gICAgQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENCLFxyXG4gICAgQ09OU1RBTlRfQ09MT1IgICAgICAgICAgICAgICAgIDogMHg4MDAxLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgIDogMHg4MDAyLFxyXG4gICAgQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDogMHg4MDAzLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICAgICAgIDogMHg4MDA0LFxyXG4gICAgQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgIDogMHg4MDA1LFxyXG5cclxuICAgIC8qIEJ1ZmZlciBPYmplY3RzICovXHJcbiAgICBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgOiAweDg4OTIsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgOiAweDg4OTMsXHJcbiAgICBBUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDg4OTQsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgOiAweDg4OTUsXHJcblxyXG4gICAgU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEUwLFxyXG4gICAgU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEU0LFxyXG4gICAgRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDogMHg4OEU4LFxyXG5cclxuICAgIEJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICA6IDB4ODc2NCxcclxuICAgIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA6IDB4ODc2NSxcclxuXHJcbiAgICBDVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgOiAweDg2MjYsXHJcblxyXG4gICAgLyogQ3VsbEZhY2VNb2RlICovXHJcbiAgICBGUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDQsXHJcbiAgICBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDUsXHJcbiAgICBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgOiAweDA0MDgsXHJcblxyXG4gICAgLyogRGVwdGhGdW5jdGlvbiAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBFbmFibGVDYXAgKi9cclxuICAgIC8qIFRFWFRVUkVfMkQgKi9cclxuICAgIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NCxcclxuICAgIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJFMixcclxuICAgIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJEMCxcclxuICAgIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEI5MCxcclxuICAgIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MSxcclxuICAgIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEMxMSxcclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAgICA6IDB4ODAzNyxcclxuICAgIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA6IDB4ODA5RSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA6IDB4ODBBMCxcclxuXHJcbiAgICAvKiBFcnJvckNvZGUgKi9cclxuICAgIE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgOiAweDA1MDAsXHJcbiAgICBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgOiAweDA1MDEsXHJcbiAgICBJTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgOiAweDA1MDIsXHJcbiAgICBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgOiAweDA1MDUsXHJcblxyXG4gICAgLyogRnJvbnRGYWNlRGlyZWN0aW9uICovXHJcbiAgICBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDAsXHJcbiAgICBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDEsXHJcblxyXG4gICAgLyogR2V0UE5hbWUgKi9cclxuICAgIExJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICA6IDB4MEIyMSxcclxuICAgIEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA6IDB4ODQ2RCxcclxuICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA6IDB4ODQ2RSxcclxuICAgIENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA6IDB4MEI0NSxcclxuICAgIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NixcclxuICAgIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MCxcclxuICAgIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEI3MixcclxuICAgIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEI3MyxcclxuICAgIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3NCxcclxuICAgIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA6IDB4MEI5MSxcclxuICAgIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA6IDB4MEI5MixcclxuICAgIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICA6IDB4MEI5NCxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA6IDB4MEI5NSxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA6IDB4MEI5NixcclxuICAgIFNURU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA6IDB4MEI5NyxcclxuICAgIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA6IDB4MEI5MyxcclxuICAgIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA6IDB4MEI5OCxcclxuICAgIFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA6IDB4ODgwMCxcclxuICAgIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA6IDB4ODgwMSxcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA6IDB4ODgwMixcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA6IDB4ODgwMyxcclxuICAgIFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA6IDB4OENBMyxcclxuICAgIFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA6IDB4OENBNCxcclxuICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA6IDB4OENBNSxcclxuICAgIFZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJBMixcclxuICAgIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA6IDB4MEMxMCxcclxuICAgIC8qICAgICAgU0NJU1NPUl9URVNUICovXHJcbiAgICBDT0xPUl9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgOiAweDBDMjIsXHJcbiAgICBDT0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgOiAweDBDMjMsXHJcbiAgICBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgOiAweDBDRjUsXHJcbiAgICBQQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgOiAweDBEMDUsXHJcbiAgICBNQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgOiAweDBEMzMsXHJcbiAgICBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgOiAweDBEM0EsXHJcbiAgICBTVUJQSVhFTF9CSVRTICAgICAgICAgICAgICAgICAgOiAweDBENTAsXHJcbiAgICBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTIsXHJcbiAgICBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTMsXHJcbiAgICBCTFVFX0JJVFMgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTQsXHJcbiAgICBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTUsXHJcbiAgICBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTYsXHJcbiAgICBTVEVOQ0lMX0JJVFMgICAgICAgICAgICAgICAgICAgOiAweDBENTcsXHJcbiAgICBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgOiAweDJBMDAsXHJcbiAgICAvKiAgICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgKi9cclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA6IDB4ODAzOCxcclxuICAgIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICA6IDB4ODA2OSxcclxuICAgIFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA6IDB4ODBBOCxcclxuICAgIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODBBOSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICA6IDB4ODBBQSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA6IDB4ODBBQixcclxuXHJcbiAgICAvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi9cclxuXHJcbiAgICBDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgOiAweDg2QTMsXHJcblxyXG4gICAgLyogSGludE1vZGUgKi9cclxuICAgIERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMCxcclxuICAgIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMSxcclxuICAgIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMixcclxuXHJcbiAgICAvKiBIaW50VGFyZ2V0ICovXHJcbiAgICBHRU5FUkFURV9NSVBNQVBfSElOVCAgICAgICAgICAgIDogMHg4MTkyLFxyXG5cclxuICAgIC8qIERhdGFUeXBlICovXHJcbiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDAsXHJcbiAgICBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgOiAweDE0MDEsXHJcbiAgICBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDIsXHJcbiAgICBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgOiAweDE0MDMsXHJcbiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDQsXHJcbiAgICBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgOiAweDE0MDUsXHJcbiAgICBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDYsXHJcblxyXG4gICAgLyogUGl4ZWxGb3JtYXQgKi9cclxuICAgIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA6IDB4MTkwMixcclxuICAgIEFMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNixcclxuICAgIFJHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNyxcclxuICAgIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOCxcclxuICAgIExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOSxcclxuICAgIExVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICA6IDB4MTkwQSxcclxuXHJcbiAgICAvKiBQaXhlbFR5cGUgKi9cclxuICAgIC8qICAgICAgVU5TSUdORURfQllURSAqL1xyXG4gICAgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgIDogMHg4MDMzLFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgIDogMHg4MDM0LFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgIDogMHg4MzYzLFxyXG5cclxuICAgIC8qIFNoYWRlcnMgKi9cclxuICAgIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDogMHg4QjMwLFxyXG4gICAgVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgOiAweDhCMzEsXHJcbiAgICBNQVhfVkVSVEVYX0FUVFJJQlMgICAgICAgICAgICAgICA6IDB4ODg2OSxcclxuICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgIDogMHg4REZCLFxyXG4gICAgTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgOiAweDhERkMsXHJcbiAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA6IDB4OEI0RCxcclxuICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgIDogMHg4QjRDLFxyXG4gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgOiAweDg4NzIsXHJcbiAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA6IDB4OERGRCxcclxuICAgIFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjRGLFxyXG4gICAgREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgOiAweDhCODAsXHJcbiAgICBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MixcclxuICAgIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDogMHg4QjgzLFxyXG4gICAgQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgOiAweDhCODUsXHJcbiAgICBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgICA6IDB4OEI4NixcclxuICAgIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDogMHg4Qjg5LFxyXG4gICAgU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgOiAweDhCOEMsXHJcbiAgICBDVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICA6IDB4OEI4RCxcclxuXHJcbiAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi9cclxuICAgIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMCxcclxuICAgIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMSxcclxuICAgIEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMixcclxuICAgIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMyxcclxuICAgIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNCxcclxuICAgIE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNSxcclxuICAgIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNixcclxuICAgIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNyxcclxuXHJcbiAgICAvKiBTdGVuY2lsT3AgKi9cclxuICAgIC8qICAgICAgWkVSTyAqL1xyXG4gICAgS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAwLFxyXG4gICAgUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAxLFxyXG4gICAgSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAyLFxyXG4gICAgREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAzLFxyXG4gICAgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNTBBLFxyXG4gICAgSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA3LFxyXG4gICAgREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA4LFxyXG5cclxuICAgIC8qIFN0cmluZ05hbWUgKi9cclxuICAgIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMCxcclxuICAgIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMSxcclxuICAgIFZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMixcclxuXHJcbiAgICAvKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbiAgICBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDAsXHJcbiAgICBMSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDEsXHJcblxyXG4gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4gICAgLyogICAgICBORUFSRVNUICovXHJcbiAgICAvKiAgICAgIExJTkVBUiAqL1xyXG4gICAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDogMHgyNzAwLFxyXG4gICAgTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgIDogMHgyNzAxLFxyXG4gICAgTkVBUkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgIDogMHgyNzAyLFxyXG4gICAgTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDogMHgyNzAzLFxyXG5cclxuICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovXHJcbiAgICBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgOiAweDI4MDAsXHJcbiAgICBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgOiAweDI4MDEsXHJcbiAgICBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgOiAweDI4MDIsXHJcbiAgICBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgOiAweDI4MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVRhcmdldCAqL1xyXG4gICAgVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgIDogMHgwREUxLFxyXG4gICAgVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNzAyLFxyXG5cclxuICAgIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA6IDB4ODUxMyxcclxuICAgIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA6IDB4ODUxNCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAgICA6IDB4ODUxNSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA6IDB4ODUxNixcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA6IDB4ODUxNyxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICA6IDB4ODUxOCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA6IDB4ODUxOSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA6IDB4ODUxQSxcclxuICAgIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA6IDB4ODUxQyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVW5pdCAqL1xyXG4gICAgVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMwLFxyXG4gICAgVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMxLFxyXG4gICAgVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMyLFxyXG4gICAgVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMzLFxyXG4gICAgVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM0LFxyXG4gICAgVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM1LFxyXG4gICAgVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM2LFxyXG4gICAgVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM3LFxyXG4gICAgVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM4LFxyXG4gICAgVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM5LFxyXG4gICAgVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENBLFxyXG4gICAgVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENCLFxyXG4gICAgVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENDLFxyXG4gICAgVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENELFxyXG4gICAgVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENFLFxyXG4gICAgVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENGLFxyXG4gICAgVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQwLFxyXG4gICAgVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQxLFxyXG4gICAgVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQyLFxyXG4gICAgVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQzLFxyXG4gICAgVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ0LFxyXG4gICAgVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ1LFxyXG4gICAgVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ2LFxyXG4gICAgVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ3LFxyXG4gICAgVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ4LFxyXG4gICAgVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ5LFxyXG4gICAgVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERBLFxyXG4gICAgVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERCLFxyXG4gICAgVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERDLFxyXG4gICAgVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERELFxyXG4gICAgVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERFLFxyXG4gICAgVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERGLFxyXG4gICAgQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgIDogMHg4NEUwLFxyXG5cclxuICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4gICAgUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgyOTAxLFxyXG4gICAgQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgIDogMHg4MTJGLFxyXG4gICAgTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgIDogMHg4MzcwLFxyXG5cclxuICAgIC8qIFVuaWZvcm0gVHlwZXMgKi9cclxuICAgIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MCxcclxuICAgIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MSxcclxuICAgIEZMT0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MixcclxuICAgIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MyxcclxuICAgIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NCxcclxuICAgIElOVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NSxcclxuICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NixcclxuICAgIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NyxcclxuICAgIEJPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OCxcclxuICAgIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OSxcclxuICAgIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QSxcclxuICAgIEZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QixcclxuICAgIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QyxcclxuICAgIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1RSxcclxuICAgIFNBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICA6IDB4OEI2MCxcclxuXHJcbiAgICAvKiBWZXJ0ZXggQXJyYXlzICovXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgIDogMHg4NjIyLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA6IDB4ODYyMyxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgOiAweDg2MjQsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgIDogMHg4NjI1LFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA6IDB4ODg2QSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAgICAgOiAweDg2NDUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIDogMHg4ODlGLFxyXG5cclxuICAgIC8qIFNoYWRlciBTb3VyY2UgKi9cclxuICAgIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA6IDB4OEI4MSxcclxuXHJcbiAgICAvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqL1xyXG4gICAgTE9XX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYwLFxyXG4gICAgTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDogMHg4REYxLFxyXG4gICAgSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REYyLFxyXG4gICAgTE9XX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYzLFxyXG4gICAgTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REY0LFxyXG4gICAgSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REY1LFxyXG5cclxuICAgIC8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi9cclxuICAgIEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MCxcclxuICAgIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MSxcclxuXHJcbiAgICBSR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTYsXHJcbiAgICBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTcsXHJcbiAgICBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhENjIsXHJcbiAgICBERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgOiAweDgxQTUsXHJcbiAgICBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgOiAweDE5MDEsXHJcbiAgICBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgOiAweDhENDgsXHJcbiAgICBERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgOiAweDg0RjksXHJcblxyXG4gICAgUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDogMHg4RDQyLFxyXG4gICAgUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgIDogMHg4RDQzLFxyXG4gICAgUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgIDogMHg4RDQ0LFxyXG4gICAgUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDogMHg4RDUwLFxyXG4gICAgUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgIDogMHg4RDUxLFxyXG4gICAgUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgIDogMHg4RDUyLFxyXG4gICAgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgIDogMHg4RDUzLFxyXG4gICAgUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgIDogMHg4RDU0LFxyXG4gICAgUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgIDogMHg4RDU1LFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgIDogMHg4Q0QwLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgOiAweDhDRDEsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA6IDB4OENEMixcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIDogMHg4Q0QzLFxyXG5cclxuICAgIENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA6IDB4OENFMCxcclxuICAgIERFUFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICA6IDB4OEQwMCxcclxuICAgIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA6IDB4OEQyMCxcclxuICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA6IDB4ODIxQSxcclxuXHJcbiAgICBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgIDogMHg4Q0Q1LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgOiAweDhDRDYsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA6IDB4OENENyxcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgIDogMHg4Q0Q5LFxyXG4gICAgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgOiAweDhDREQsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgIDogMHg4Q0E2LFxyXG4gICAgUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDogMHg4Q0E3LFxyXG4gICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDogMHg4NEU4LFxyXG5cclxuICAgIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA6IDB4MDUwNixcclxuXHJcbiAgICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqL1xyXG4gICAgVU5QQUNLX0ZMSVBfWV9XRUJHTCAgICAgICAgICAgIDogMHg5MjQwLFxyXG4gICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIDogMHg5MjQxLFxyXG4gICAgQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgIDogMHg5MjQyLFxyXG4gICAgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA6IDB4OTI0MyxcclxuICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICA6IDB4OTI0NCxcclxufTtcclxuIiwiLyoqXHJcbiAqIFNpbXBsZSBkb3VibGUgbGlua2VkIGxpc3QuIENvbXBhcmVkIHdpdGggYXJyYXksIGl0IGhhcyBPKDEpIHJlbW92ZSBvcGVyYXRpb24uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkxpbmtlZExpc3RcclxuICovXHJcbnZhciBMaW5rZWRMaXN0ID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHRoaXMuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgcmV0dXJuIGVudHJ5O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluc2VydCBhIG5ldyB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0gIHt9IHZhbFxyXG4gKiBAcmV0dXJuIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEF0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAobmV4dCAmJiBjdXJzb3IgIT0gaWR4KSB7XHJcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgICAgICB2YXIgcHJldiA9IG5leHQucHJldjtcclxuICAgICAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICAgICAgZW50cnkucHJldiA9IHByZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgICAgIG5leHQucHJldiA9IGVudHJ5O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnQodmFsKTtcclxuICAgIH1cclxufTtcclxuXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEJlZm9yZUVudHJ5ID0gZnVuY3Rpb24gKHZhbCwgbmV4dCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgaWYgKCFwcmV2KSB7IC8vbmV4dCBpcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoKys7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGFuIGVudHJ5IGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGlmICghdGhpcy5oZWFkKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSB0aGlzLnRhaWw7XHJcbiAgICAgICAgdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkuXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICB2YXIgcHJldiA9IGVudHJ5LnByZXY7XHJcbiAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XHJcbiAgICBpZiAocHJldikge1xyXG4gICAgICAgIHByZXYubmV4dCA9IG5leHQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBJcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gbmV4dDtcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIHRhaWxcclxuICAgICAgICB0aGlzLnRhaWwgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IGVudHJ5LnByZXYgPSBudWxsO1xyXG4gICAgdGhpcy5fbGVuZ3RoLS07XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGVudHJ5IGF0IGluZGV4LlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmVBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKGN1cnIpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZShjdXJyKTtcclxuICAgICAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCBoZWFkIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5oZWFkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB0YWlsIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldFRhaWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy50YWlsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFpbC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5nZXRBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnIudmFsdWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7fSB2YWx1ZVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIpIHtcclxuICAgICAgICBpZiAoY3Vyci52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIElmIGxpc3QgaXMgZW1wdHlcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYlxyXG4gKiBAcGFyYW0gIHt9IGNvbnRleHRcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGlkeCA9IDA7XHJcbiAgICB2YXIgaGF2ZUNvbnRleHQgPSB0eXBlb2YoY29udGV4dCkgIT0gJ3VuZGVmaW5lZCc7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChoYXZlQ29udGV4dCkge1xyXG4gICAgICAgICAgICBjYi5jYWxsKGNvbnRleHQsIGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjYihjdXJyLnZhbHVlLCBpZHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGlkeCsrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBsaXN0XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudGFpbCA9IHRoaXMuaGVhZCA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAcGFyYW0ge30gdmFsXHJcbiAqL1xyXG5MaW5rZWRMaXN0LkVudHJ5ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5leHQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnByZXYgPSBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlua2VkTGlzdDtcclxuIiwiaW1wb3J0IExpbmtlZExpc3QgZnJvbSAnLi9MaW5rZWRMaXN0JztcclxuXHJcbi8qKlxyXG4gKiBMUlUgQ2FjaGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTFJVXHJcbiAqL1xyXG52YXIgTFJVID0gZnVuY3Rpb24gKG1heFNpemUpIHtcclxuXHJcbiAgICB0aGlzLl9saXN0ID0gbmV3IExpbmtlZExpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9tYXAgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZSB8fCAxMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgY2FjaGUgbWF4IHNpemVcclxuICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICovXHJcbkxSVS5wcm90b3R5cGUuc2V0TWF4U2l6ZSA9IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICB0aGlzLl9tYXhTaXplID0gc2l6ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX2xpc3QubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbiA+PSB0aGlzLl9tYXhTaXplICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkXHJcbiAgICAgICAgICAgIHZhciBsZWFzdFVzZWRFbnRyeSA9IHRoaXMuX2xpc3QuaGVhZDtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUobGVhc3RVc2VkRW50cnkpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2xlYXN0VXNlZEVudHJ5LmtleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9saXN0Lmluc2VydCh2YWx1ZSk7XHJcbiAgICAgICAgZW50cnkua2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX21hcFtrZXldID0gZW50cnk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7c3RyaW5nfSBrZXlcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0aGlzLl9tYXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIC8vIFB1dCB0aGUgbGF0ZXN0IHVzZWQgZW50cnkgaW4gdGhlIHRhaWxcclxuICAgICAgICBpZiAoZW50cnkgIT09IHRoaXMuX2xpc3QudGFpbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuICovXHJcbkxSVS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XHJcbiAgICBpZiAodHlwZW9mKGVudHJ5KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2tleV07XHJcbiAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUoZW50cnkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBjYWNoZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xpc3QuY2xlYXIoKTtcclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTFJVO1xyXG4iLCIvKipcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUuY29sb3JcclxuICovXHJcbmltcG9ydCBMUlUgZnJvbSAnLi4vY29yZS9MUlUnO1xyXG5cclxudmFyIGNvbG9yVXRpbCA9IHt9O1xyXG5cclxudmFyIGtDU1NDb2xvclRhYmxlID0ge1xyXG4gICAgJ3RyYW5zcGFyZW50JzogWzAsMCwwLDBdLCAnYWxpY2VibHVlJzogWzI0MCwyNDgsMjU1LDFdLFxyXG4gICAgJ2FudGlxdWV3aGl0ZSc6IFsyNTAsMjM1LDIxNSwxXSwgJ2FxdWEnOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2FxdWFtYXJpbmUnOiBbMTI3LDI1NSwyMTIsMV0sICdhenVyZSc6IFsyNDAsMjU1LDI1NSwxXSxcclxuICAgICdiZWlnZSc6IFsyNDUsMjQ1LDIyMCwxXSwgJ2Jpc3F1ZSc6IFsyNTUsMjI4LDE5NiwxXSxcclxuICAgICdibGFjayc6IFswLDAsMCwxXSwgJ2JsYW5jaGVkYWxtb25kJzogWzI1NSwyMzUsMjA1LDFdLFxyXG4gICAgJ2JsdWUnOiBbMCwwLDI1NSwxXSwgJ2JsdWV2aW9sZXQnOiBbMTM4LDQzLDIyNiwxXSxcclxuICAgICdicm93bic6IFsxNjUsNDIsNDIsMV0sICdidXJseXdvb2QnOiBbMjIyLDE4NCwxMzUsMV0sXHJcbiAgICAnY2FkZXRibHVlJzogWzk1LDE1OCwxNjAsMV0sICdjaGFydHJldXNlJzogWzEyNywyNTUsMCwxXSxcclxuICAgICdjaG9jb2xhdGUnOiBbMjEwLDEwNSwzMCwxXSwgJ2NvcmFsJzogWzI1NSwxMjcsODAsMV0sXHJcbiAgICAnY29ybmZsb3dlcmJsdWUnOiBbMTAwLDE0OSwyMzcsMV0sICdjb3Juc2lsayc6IFsyNTUsMjQ4LDIyMCwxXSxcclxuICAgICdjcmltc29uJzogWzIyMCwyMCw2MCwxXSwgJ2N5YW4nOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2RhcmtibHVlJzogWzAsMCwxMzksMV0sICdkYXJrY3lhbic6IFswLDEzOSwxMzksMV0sXHJcbiAgICAnZGFya2dvbGRlbnJvZCc6IFsxODQsMTM0LDExLDFdLCAnZGFya2dyYXknOiBbMTY5LDE2OSwxNjksMV0sXHJcbiAgICAnZGFya2dyZWVuJzogWzAsMTAwLDAsMV0sICdkYXJrZ3JleSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJra2hha2knOiBbMTg5LDE4MywxMDcsMV0sICdkYXJrbWFnZW50YSc6IFsxMzksMCwxMzksMV0sXHJcbiAgICAnZGFya29saXZlZ3JlZW4nOiBbODUsMTA3LDQ3LDFdLCAnZGFya29yYW5nZSc6IFsyNTUsMTQwLDAsMV0sXHJcbiAgICAnZGFya29yY2hpZCc6IFsxNTMsNTAsMjA0LDFdLCAnZGFya3JlZCc6IFsxMzksMCwwLDFdLFxyXG4gICAgJ2RhcmtzYWxtb24nOiBbMjMzLDE1MCwxMjIsMV0sICdkYXJrc2VhZ3JlZW4nOiBbMTQzLDE4OCwxNDMsMV0sXHJcbiAgICAnZGFya3NsYXRlYmx1ZSc6IFs3Miw2MSwxMzksMV0sICdkYXJrc2xhdGVncmF5JzogWzQ3LDc5LDc5LDFdLFxyXG4gICAgJ2RhcmtzbGF0ZWdyZXknOiBbNDcsNzksNzksMV0sICdkYXJrdHVycXVvaXNlJzogWzAsMjA2LDIwOSwxXSxcclxuICAgICdkYXJrdmlvbGV0JzogWzE0OCwwLDIxMSwxXSwgJ2RlZXBwaW5rJzogWzI1NSwyMCwxNDcsMV0sXHJcbiAgICAnZGVlcHNreWJsdWUnOiBbMCwxOTEsMjU1LDFdLCAnZGltZ3JheSc6IFsxMDUsMTA1LDEwNSwxXSxcclxuICAgICdkaW1ncmV5JzogWzEwNSwxMDUsMTA1LDFdLCAnZG9kZ2VyYmx1ZSc6IFszMCwxNDQsMjU1LDFdLFxyXG4gICAgJ2ZpcmVicmljayc6IFsxNzgsMzQsMzQsMV0sICdmbG9yYWx3aGl0ZSc6IFsyNTUsMjUwLDI0MCwxXSxcclxuICAgICdmb3Jlc3RncmVlbic6IFszNCwxMzksMzQsMV0sICdmdWNoc2lhJzogWzI1NSwwLDI1NSwxXSxcclxuICAgICdnYWluc2Jvcm8nOiBbMjIwLDIyMCwyMjAsMV0sICdnaG9zdHdoaXRlJzogWzI0OCwyNDgsMjU1LDFdLFxyXG4gICAgJ2dvbGQnOiBbMjU1LDIxNSwwLDFdLCAnZ29sZGVucm9kJzogWzIxOCwxNjUsMzIsMV0sXHJcbiAgICAnZ3JheSc6IFsxMjgsMTI4LDEyOCwxXSwgJ2dyZWVuJzogWzAsMTI4LDAsMV0sXHJcbiAgICAnZ3JlZW55ZWxsb3cnOiBbMTczLDI1NSw0NywxXSwgJ2dyZXknOiBbMTI4LDEyOCwxMjgsMV0sXHJcbiAgICAnaG9uZXlkZXcnOiBbMjQwLDI1NSwyNDAsMV0sICdob3RwaW5rJzogWzI1NSwxMDUsMTgwLDFdLFxyXG4gICAgJ2luZGlhbnJlZCc6IFsyMDUsOTIsOTIsMV0sICdpbmRpZ28nOiBbNzUsMCwxMzAsMV0sXHJcbiAgICAnaXZvcnknOiBbMjU1LDI1NSwyNDAsMV0sICdraGFraSc6IFsyNDAsMjMwLDE0MCwxXSxcclxuICAgICdsYXZlbmRlcic6IFsyMzAsMjMwLDI1MCwxXSwgJ2xhdmVuZGVyYmx1c2gnOiBbMjU1LDI0MCwyNDUsMV0sXHJcbiAgICAnbGF3bmdyZWVuJzogWzEyNCwyNTIsMCwxXSwgJ2xlbW9uY2hpZmZvbic6IFsyNTUsMjUwLDIwNSwxXSxcclxuICAgICdsaWdodGJsdWUnOiBbMTczLDIxNiwyMzAsMV0sICdsaWdodGNvcmFsJzogWzI0MCwxMjgsMTI4LDFdLFxyXG4gICAgJ2xpZ2h0Y3lhbic6IFsyMjQsMjU1LDI1NSwxXSwgJ2xpZ2h0Z29sZGVucm9keWVsbG93JzogWzI1MCwyNTAsMjEwLDFdLFxyXG4gICAgJ2xpZ2h0Z3JheSc6IFsyMTEsMjExLDIxMSwxXSwgJ2xpZ2h0Z3JlZW4nOiBbMTQ0LDIzOCwxNDQsMV0sXHJcbiAgICAnbGlnaHRncmV5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRwaW5rJzogWzI1NSwxODIsMTkzLDFdLFxyXG4gICAgJ2xpZ2h0c2FsbW9uJzogWzI1NSwxNjAsMTIyLDFdLCAnbGlnaHRzZWFncmVlbic6IFszMiwxNzgsMTcwLDFdLFxyXG4gICAgJ2xpZ2h0c2t5Ymx1ZSc6IFsxMzUsMjA2LDI1MCwxXSwgJ2xpZ2h0c2xhdGVncmF5JzogWzExOSwxMzYsMTUzLDFdLFxyXG4gICAgJ2xpZ2h0c2xhdGVncmV5JzogWzExOSwxMzYsMTUzLDFdLCAnbGlnaHRzdGVlbGJsdWUnOiBbMTc2LDE5NiwyMjIsMV0sXHJcbiAgICAnbGlnaHR5ZWxsb3cnOiBbMjU1LDI1NSwyMjQsMV0sICdsaW1lJzogWzAsMjU1LDAsMV0sXHJcbiAgICAnbGltZWdyZWVuJzogWzUwLDIwNSw1MCwxXSwgJ2xpbmVuJzogWzI1MCwyNDAsMjMwLDFdLFxyXG4gICAgJ21hZ2VudGEnOiBbMjU1LDAsMjU1LDFdLCAnbWFyb29uJzogWzEyOCwwLDAsMV0sXHJcbiAgICAnbWVkaXVtYXF1YW1hcmluZSc6IFsxMDIsMjA1LDE3MCwxXSwgJ21lZGl1bWJsdWUnOiBbMCwwLDIwNSwxXSxcclxuICAgICdtZWRpdW1vcmNoaWQnOiBbMTg2LDg1LDIxMSwxXSwgJ21lZGl1bXB1cnBsZSc6IFsxNDcsMTEyLDIxOSwxXSxcclxuICAgICdtZWRpdW1zZWFncmVlbic6IFs2MCwxNzksMTEzLDFdLCAnbWVkaXVtc2xhdGVibHVlJzogWzEyMywxMDQsMjM4LDFdLFxyXG4gICAgJ21lZGl1bXNwcmluZ2dyZWVuJzogWzAsMjUwLDE1NCwxXSwgJ21lZGl1bXR1cnF1b2lzZSc6IFs3MiwyMDksMjA0LDFdLFxyXG4gICAgJ21lZGl1bXZpb2xldHJlZCc6IFsxOTksMjEsMTMzLDFdLCAnbWlkbmlnaHRibHVlJzogWzI1LDI1LDExMiwxXSxcclxuICAgICdtaW50Y3JlYW0nOiBbMjQ1LDI1NSwyNTAsMV0sICdtaXN0eXJvc2UnOiBbMjU1LDIyOCwyMjUsMV0sXHJcbiAgICAnbW9jY2FzaW4nOiBbMjU1LDIyOCwxODEsMV0sICduYXZham93aGl0ZSc6IFsyNTUsMjIyLDE3MywxXSxcclxuICAgICduYXZ5JzogWzAsMCwxMjgsMV0sICdvbGRsYWNlJzogWzI1MywyNDUsMjMwLDFdLFxyXG4gICAgJ29saXZlJzogWzEyOCwxMjgsMCwxXSwgJ29saXZlZHJhYic6IFsxMDcsMTQyLDM1LDFdLFxyXG4gICAgJ29yYW5nZSc6IFsyNTUsMTY1LDAsMV0sICdvcmFuZ2VyZWQnOiBbMjU1LDY5LDAsMV0sXHJcbiAgICAnb3JjaGlkJzogWzIxOCwxMTIsMjE0LDFdLCAncGFsZWdvbGRlbnJvZCc6IFsyMzgsMjMyLDE3MCwxXSxcclxuICAgICdwYWxlZ3JlZW4nOiBbMTUyLDI1MSwxNTIsMV0sICdwYWxldHVycXVvaXNlJzogWzE3NSwyMzgsMjM4LDFdLFxyXG4gICAgJ3BhbGV2aW9sZXRyZWQnOiBbMjE5LDExMiwxNDcsMV0sICdwYXBheWF3aGlwJzogWzI1NSwyMzksMjEzLDFdLFxyXG4gICAgJ3BlYWNocHVmZic6IFsyNTUsMjE4LDE4NSwxXSwgJ3BlcnUnOiBbMjA1LDEzMyw2MywxXSxcclxuICAgICdwaW5rJzogWzI1NSwxOTIsMjAzLDFdLCAncGx1bSc6IFsyMjEsMTYwLDIyMSwxXSxcclxuICAgICdwb3dkZXJibHVlJzogWzE3NiwyMjQsMjMwLDFdLCAncHVycGxlJzogWzEyOCwwLDEyOCwxXSxcclxuICAgICdyZWQnOiBbMjU1LDAsMCwxXSwgJ3Jvc3licm93bic6IFsxODgsMTQzLDE0MywxXSxcclxuICAgICdyb3lhbGJsdWUnOiBbNjUsMTA1LDIyNSwxXSwgJ3NhZGRsZWJyb3duJzogWzEzOSw2OSwxOSwxXSxcclxuICAgICdzYWxtb24nOiBbMjUwLDEyOCwxMTQsMV0sICdzYW5keWJyb3duJzogWzI0NCwxNjQsOTYsMV0sXHJcbiAgICAnc2VhZ3JlZW4nOiBbNDYsMTM5LDg3LDFdLCAnc2Vhc2hlbGwnOiBbMjU1LDI0NSwyMzgsMV0sXHJcbiAgICAnc2llbm5hJzogWzE2MCw4Miw0NSwxXSwgJ3NpbHZlcic6IFsxOTIsMTkyLDE5MiwxXSxcclxuICAgICdza3libHVlJzogWzEzNSwyMDYsMjM1LDFdLCAnc2xhdGVibHVlJzogWzEwNiw5MCwyMDUsMV0sXHJcbiAgICAnc2xhdGVncmF5JzogWzExMiwxMjgsMTQ0LDFdLCAnc2xhdGVncmV5JzogWzExMiwxMjgsMTQ0LDFdLFxyXG4gICAgJ3Nub3cnOiBbMjU1LDI1MCwyNTAsMV0sICdzcHJpbmdncmVlbic6IFswLDI1NSwxMjcsMV0sXHJcbiAgICAnc3RlZWxibHVlJzogWzcwLDEzMCwxODAsMV0sICd0YW4nOiBbMjEwLDE4MCwxNDAsMV0sXHJcbiAgICAndGVhbCc6IFswLDEyOCwxMjgsMV0sICd0aGlzdGxlJzogWzIxNiwxOTEsMjE2LDFdLFxyXG4gICAgJ3RvbWF0byc6IFsyNTUsOTksNzEsMV0sICd0dXJxdW9pc2UnOiBbNjQsMjI0LDIwOCwxXSxcclxuICAgICd2aW9sZXQnOiBbMjM4LDEzMCwyMzgsMV0sICd3aGVhdCc6IFsyNDUsMjIyLDE3OSwxXSxcclxuICAgICd3aGl0ZSc6IFsyNTUsMjU1LDI1NSwxXSwgJ3doaXRlc21va2UnOiBbMjQ1LDI0NSwyNDUsMV0sXHJcbiAgICAneWVsbG93JzogWzI1NSwyNTUsMCwxXSwgJ3llbGxvd2dyZWVuJzogWzE1NCwyMDUsNTAsMV1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wQ3NzQnl0ZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMjU1LlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMjU1ID8gMjU1IDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NBbmdsZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMzYwLlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMzYwID8gMzYwIDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NGbG9hdChmKSB7ICAvLyBDbGFtcCB0byBmbG9hdCAwLjAgLi4gMS4wLlxyXG4gICAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzSW50KHN0cikgeyAgLy8gaW50IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUZsb2F0KHN0cikgLyAxMDAgKiAyNTUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUludChzdHIsIDEwKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzRmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxyXG4gICAgaWYgKHN0ci5sZW5ndGggJiYgc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gMSkgPT09ICclJykge1xyXG4gICAgICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSAvIDEwMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjc3NIdWVUb1JnYihtMSwgbTIsIGgpIHtcclxuICAgIGlmIChoIDwgMCkge1xyXG4gICAgICAgIGggKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGggPiAxKSB7XHJcbiAgICAgICAgaCAtPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoICogNiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiBoICogNjtcclxuICAgIH1cclxuICAgIGlmIChoICogMiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTI7XHJcbiAgICB9XHJcbiAgICBpZiAoaCAqIDMgPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcclxuICAgIH1cclxuICAgIHJldHVybiBtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGVycE51bWJlcihhLCBiLCBwKSB7XHJcbiAgICByZXR1cm4gYSArIChiIC0gYSkgKiBwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRSZ2JhKG91dCwgciwgZywgYiwgYSkge1xyXG4gICAgb3V0WzBdID0gcjsgb3V0WzFdID0gZzsgb3V0WzJdID0gYjsgb3V0WzNdID0gYTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuZnVuY3Rpb24gY29weVJnYmEob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdOyBvdXRbMV0gPSBhWzFdOyBvdXRbMl0gPSBhWzJdOyBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxudmFyIGNvbG9yQ2FjaGUgPSBuZXcgTFJVKDIwKTtcclxudmFyIGxhc3RSZW1vdmVkQXJyID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIC8vIFJldXNlIHJlbW92ZWQgYXJyYXlcclxuICAgIGlmIChsYXN0UmVtb3ZlZEFycikge1xyXG4gICAgICAgIGNvcHlSZ2JhKGxhc3RSZW1vdmVkQXJyLCByZ2JhQXJyKTtcclxuICAgIH1cclxuICAgIGxhc3RSZW1vdmVkQXJyID0gY29sb3JDYWNoZS5wdXQoY29sb3JTdHIsIGxhc3RSZW1vdmVkQXJyIHx8IChyZ2JhQXJyLnNsaWNlKCkpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5wYXJzZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JTdHJcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxyXG4gKi9cclxuY29sb3JVdGlsLnBhcnNlID0gZnVuY3Rpb24gKGNvbG9yU3RyLCByZ2JhQXJyKSB7XHJcbiAgICBpZiAoIWNvbG9yU3RyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyciA9IHJnYmFBcnIgfHwgW107XHJcblxyXG4gICAgdmFyIGNhY2hlZCA9IGNvbG9yQ2FjaGUuZ2V0KGNvbG9yU3RyKTtcclxuICAgIGlmIChjYWNoZWQpIHtcclxuICAgICAgICByZXR1cm4gY29weVJnYmEocmdiYUFyciwgY2FjaGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb2xvclN0ciBtYXkgYmUgbm90IHN0cmluZ1xyXG4gICAgY29sb3JTdHIgPSBjb2xvclN0ciArICcnO1xyXG4gICAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXHJcbiAgICB2YXIgc3RyID0gY29sb3JTdHIucmVwbGFjZSgvIC9nLCAnJykudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDb2xvciBrZXl3b3JkcyAoYW5kIHRyYW5zcGFyZW50KSBsb29rdXAuXHJcbiAgICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSB7XHJcbiAgICAgICAgY29weVJnYmEocmdiYUFyciwga0NTU0NvbG9yVGFibGVbc3RyXSk7XHJcbiAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2FiYyBhbmQgI2FiYzEyMyBzeW50YXguXHJcbiAgICBpZiAoc3RyLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZjApIHwgKChpdiAmIDB4ZjApID4+IDQpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmKSB8ICgoaXYgJiAweGYpIDw8IDQpLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0ci5sZW5ndGggPT09IDcpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDAwMCkgPj4gMTYsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDApID4+IDgsXHJcbiAgICAgICAgICAgICAgICBpdiAmIDB4ZmYsXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcclxuICAgIGlmIChvcCAhPT0gLTEgJiYgZXAgKyAxID09PSBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGZuYW1lID0gc3RyLnN1YnN0cigwLCBvcCk7XHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHN0ci5zdWJzdHIob3AgKyAxLCBlcCAtIChvcCArIDEpKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHZhciBhbHBoYSA9IDE7ICAvLyBUbyBhbGxvdyBjYXNlIGZhbGx0aHJvdWdoLlxyXG4gICAgICAgIHN3aXRjaCAoZm5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAncmdiYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxwaGEgPSBwYXJzZUNzc0Zsb2F0KHBhcmFtcy5wb3AoKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxyXG4gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guXHJcbiAgICAgICAgICAgIGNhc2UgJ3JnYic6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzFdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMl0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGFscGhhXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgY2FzZSAnaHNsYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1zWzNdID0gcGFyc2VDc3NGbG9hdChwYXJhbXNbM10pO1xyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2wnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGhzbGEycmdiYShwYXJhbXMsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgIHJldHVybjtcclxufTtcclxuXHJcbmNvbG9yVXRpbC5wYXJzZVRvRmxvYXQgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIHJnYmFBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgaWYgKCFyZ2JhQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyclswXSAvPSAyNTU7XHJcbiAgICByZ2JhQXJyWzFdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMl0gLz0gMjU1O1xyXG4gICAgcmV0dXJuIHJnYmFBcnI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IuaHNsYTJyZ2JhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKi9cclxuZnVuY3Rpb24gaHNsYTJyZ2JhKGhzbGEsIHJnYmEpIHtcclxuICAgIHZhciBoID0gKCgocGFyc2VGbG9hdChoc2xhWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxyXG4gICAgLy8gTk9URShkZWFubSk6IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgcy9sIHNob3VsZCBvbmx5IGJlXHJcbiAgICAvLyBwZXJjZW50YWdlcywgYnV0IHdlIGRvbid0IGJvdGhlciBhbmQgbGV0IGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICB2YXIgcyA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsxXSk7XHJcbiAgICB2YXIgbCA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsyXSk7XHJcbiAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcclxuICAgIHZhciBtMSA9IGwgKiAyIC0gbTI7XHJcblxyXG4gICAgcmdiYSA9IHJnYmEgfHwgW107XHJcbiAgICBzZXRSZ2JhKHJnYmEsXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCArIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxyXG4gICAgICAgIGNsYW1wQ3NzQnl0ZShjc3NIdWVUb1JnYihtMSwgbTIsIGggLSAxIC8gMykgKiAyNTUpLFxyXG4gICAgICAgIDFcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGhzbGEubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgcmdiYVszXSA9IGhzbGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJnYmE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IucmdiYTJoc2xhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHJnYmFcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICovXHJcbmZ1bmN0aW9uIHJnYmEyaHNsYShyZ2JhKSB7XHJcbiAgICBpZiAoIXJnYmEpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUkdCIGZyb20gMCB0byAyNTVcclxuICAgIHZhciBSID0gcmdiYVswXSAvIDI1NTtcclxuICAgIHZhciBHID0gcmdiYVsxXSAvIDI1NTtcclxuICAgIHZhciBCID0gcmdiYVsyXSAvIDI1NTtcclxuXHJcbiAgICB2YXIgdk1pbiA9IE1hdGgubWluKFIsIEcsIEIpOyAvLyBNaW4uIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIHZNYXggPSBNYXRoLm1heChSLCBHLCBCKTsgLy8gTWF4LiB2YWx1ZSBvZiBSR0JcclxuICAgIHZhciBkZWx0YSA9IHZNYXggLSB2TWluOyAvLyBEZWx0YSBSR0IgdmFsdWVcclxuXHJcbiAgICB2YXIgTCA9ICh2TWF4ICsgdk1pbikgLyAyO1xyXG4gICAgdmFyIEg7XHJcbiAgICB2YXIgUztcclxuICAgIC8vIEhTTCByZXN1bHRzIGZyb20gMCB0byAxXHJcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICBIID0gMDtcclxuICAgICAgICBTID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChMIDwgMC41KSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICh2TWF4ICsgdk1pbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBTID0gZGVsdGEgLyAoMiAtIHZNYXggLSB2TWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkZWx0YVIgPSAoKCh2TWF4IC0gUikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUcgPSAoKCh2TWF4IC0gRykgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUIgPSAoKCh2TWF4IC0gQikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG5cclxuICAgICAgICBpZiAoUiA9PT0gdk1heCkge1xyXG4gICAgICAgICAgICBIID0gZGVsdGFCIC0gZGVsdGFHO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChHID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMSAvIDMpICsgZGVsdGFSIC0gZGVsdGFCO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChCID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMiAvIDMpICsgZGVsdGFHIC0gZGVsdGFSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPCAwKSB7XHJcbiAgICAgICAgICAgIEggKz0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChIID4gMSkge1xyXG4gICAgICAgICAgICBIIC09IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBoc2xhID0gW0ggKiAzNjAsIFMsIExdO1xyXG5cclxuICAgIGlmIChyZ2JhWzNdICE9IG51bGwpIHtcclxuICAgICAgICBoc2xhLnB1c2gocmdiYVszXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhzbGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IubGlmdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC5saWZ0ID0gZnVuY3Rpb24gKGNvbG9yLCBsZXZlbCkge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsZXZlbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gY29sb3JBcnJbaV0gKiAoMSAtIGxldmVsKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvckFycltpXSA9ICgoMjU1IC0gY29sb3JBcnJbaV0pICogbGV2ZWwgKyBjb2xvckFycltpXSkgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGNvbG9yQXJyLCBjb2xvckFyci5sZW5ndGggPT09IDQgPyAncmdiYScgOiAncmdiJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IudG9IZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC50b0hleCA9IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIHJldHVybiAoKDEgPDwgMjQpICsgKGNvbG9yQXJyWzBdIDw8IDE2KSArIChjb2xvckFyclsxXSA8PCA4KSArICgrY29sb3JBcnJbMl0pKS50b1N0cmluZygxNikuc2xpY2UoMSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTWFwIHZhbHVlIHRvIGNvbG9yLiBGYXN0ZXIgdGhhbiBsZXJwIG1ldGhvZHMgYmVjYXVzZSBjb2xvciBpcyByZXByZXNlbnRlZCBieSByZ2JhIGFycmF5LlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBjb2xvcnMgTGlzdCBvZiByZ2JhIGNvbG9yIGFycmF5XHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvdXRdIE1hcHBlZCBnYmEgY29sb3IgYXJyYXlcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IHdpbGwgYmUgbnVsbC91bmRlZmluZWQgaWYgaW5wdXQgaWxsZWdhbC5cclxuICovXHJcbmNvbG9yVXRpbC5mYXN0TGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgb3V0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dCA9IG91dCB8fCBbXTtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yc1tsZWZ0SW5kZXhdO1xyXG4gICAgdmFyIHJpZ2h0Q29sb3IgPSBjb2xvcnNbcmlnaHRJbmRleF07XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuICAgIG91dFswXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKTtcclxuICAgIG91dFsxXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsxXSwgcmlnaHRDb2xvclsxXSwgZHYpKTtcclxuICAgIG91dFsyXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKTtcclxuICAgIG91dFszXSA9IGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuY29sb3JVdGlsLmZhc3RNYXBUb0NvbG9yID0gY29sb3JVdGlsLmZhc3RMZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3JtYWxpemVkVmFsdWUgQSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNvbG9ycyBDb2xvciBsaXN0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBmdWxsT3V0cHV0IERlZmF1bHQgZmFsc2UuXHJcbiAqIEByZXR1cm4geyhzdHJpbmd8T2JqZWN0KX0gUmVzdWx0IGNvbG9yLiBJZiBmdWxsT3V0cHV0LFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IC4uLiwgbGVmdEluZGV4OiAuLi4sIHJpZ2h0SW5kZXg6IC4uLiwgdmFsdWU6IC4uLn0sXHJcbiAqL1xyXG5jb2xvclV0aWwubGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgZnVsbE91dHB1dCkge1xyXG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXHJcbiAgICAgICAgfHwgIShub3JtYWxpemVkVmFsdWUgPj0gMCAmJiBub3JtYWxpemVkVmFsdWUgPD0gMSlcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbbGVmdEluZGV4XSk7XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbcmlnaHRJbmRleF0pO1xyXG4gICAgdmFyIGR2ID0gdmFsdWUgLSBsZWZ0SW5kZXg7XHJcblxyXG4gICAgdmFyIGNvbG9yID0gY29sb3JVdGlsLnN0cmluZ2lmeShcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMl0sIHJpZ2h0Q29sb3JbMl0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSlcclxuICAgICAgICBdLFxyXG4gICAgICAgICdyZ2JhJ1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZnVsbE91dHB1dFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgIGxlZnRJbmRleDogbGVmdEluZGV4LFxyXG4gICAgICAgICAgICByaWdodEluZGV4OiByaWdodEluZGV4LFxyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgOiBjb2xvcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkXHJcbiAqL1xyXG5jb2xvclV0aWwubWFwVG9Db2xvciA9IGNvbG9yVXRpbC5sZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBoIDAgfiAzNjAsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcyAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBsIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlIU0wgPSBmdW5jdGlvbiAoY29sb3IsIGgsIHMsIGwpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgICBjb2xvciA9IHJnYmEyaHNsYShjb2xvcik7XHJcbiAgICAgICAgaCAhPSBudWxsICYmIChjb2xvclswXSA9IGNsYW1wQ3NzQW5nbGUoaCkpO1xyXG4gICAgICAgIHMgIT0gbnVsbCAmJiAoY29sb3JbMV0gPSBwYXJzZUNzc0Zsb2F0KHMpKTtcclxuICAgICAgICBsICE9IG51bGwgJiYgKGNvbG9yWzJdID0gcGFyc2VDc3NGbG9hdChsKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGhzbGEycmdiYShjb2xvciksICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBhbHBoYSAwIH4gMVxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlBbHBoYSA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IgJiYgYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbG9yWzNdID0gY2xhbXBDc3NGbG9hdChhbHBoYSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3IsICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJDb2xvciBsaWtlIFsxMiwzMyw0NCwwLjRdXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICdyZ2JhJywgJ2hzdmEnLCAuLi5cclxuICogQHJldHVybiB7c3RyaW5nfSBSZXN1bHQgY29sb3IuIChJZiBpbnB1dCBpbGxlZ2FsLCByZXR1cm4gdW5kZWZpbmVkKS5cclxuICovXHJcbmNvbG9yVXRpbC5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoYXJyQ29sb3IsIHR5cGUpIHtcclxuICAgIGlmICghYXJyQ29sb3IgfHwgIWFyckNvbG9yLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjb2xvclN0ciA9IGFyckNvbG9yWzBdICsgJywnICsgYXJyQ29sb3JbMV0gKyAnLCcgKyBhcnJDb2xvclsyXTtcclxuICAgIGlmICh0eXBlID09PSAncmdiYScgfHwgdHlwZSA9PT0gJ2hzdmEnIHx8IHR5cGUgPT09ICdoc2xhJykge1xyXG4gICAgICAgIGNvbG9yU3RyICs9ICcsJyArIGFyckNvbG9yWzNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGUgKyAnKCcgKyBjb2xvclN0ciArICcpJztcclxufTtcclxuXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29sb3JVdGlsOyIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldERlZmluZUNvZGUoZGVmaW5lcykge1xyXG4gICAgdmFyIGRlZmluZUtleXMgPSBPYmplY3Qua2V5cyhkZWZpbmVzKTtcclxuICAgIGRlZmluZUtleXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmaW5lS2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBrZXkgPSBkZWZpbmVLZXlzW2ldO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluZXNba2V5XTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5ICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleSh2ZXJ0ZXhEZWZpbmVzLCBmcmFnbWVudERlZmluZXMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgZW5hYmxlZFRleHR1cmVzLnNvcnQoKTtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICBkZWZpbmVTdHIucHVzaChzeW1ib2wpO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGdldERlZmluZUNvZGUodmVydGV4RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0RGVmaW5lQ29kZShmcmFnbWVudERlZmluZXMpICsgJ1xcbidcclxuICAgICAgICArIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG4vKipcclxuICogTWF0ZXJpYWwgZGVmaW5lcyB0aGUgYXBwZWFyYW5jZSBvZiBtZXNoIHN1cmZhY2UsIGxpa2UgYGNvbG9yYCwgYHJvdWdobmVzc2AsIGBtZXRhbG5lc3NgLCBldGMuXHJcbiAqIEl0IGNvbnRhaW5zIGEge0BsaW5rIGNsYXkuU2hhZGVyfSBhbmQgY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgc3RhbmRhcmQgbWF0ZXJpYWxcclxuYGBganNcclxudmFyIG1hdGVyaWFsID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gICAgc2hhZGVyOiBuZXcgY2xheS5TaGFkZXIoXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnZlcnRleCcpLFxyXG4gICAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5mcmFnbWVudCcpXHJcbiAgICApXHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWF0ZXJpYWxcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBNYXRlcmlhbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIHVuaWZvcm1zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aFRlc3Q6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoTWFzazogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJsZW5kIGZ1bmMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBtYXRlcmlhbFxyXG4gICAgICAgICAqIGhhdmUgY3VzdG9tIGJsZW5kaW5nXHJcbiAgICAgICAgICogVGhlIGdsIGNvbnRleHQgd2lsbCBiZSB0aGUgb25seSBhcmd1bWVudCBwYXNzZWQgaW4gdGhvIHRoZVxyXG4gICAgICAgICAqIGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICogRGV0YWlsIG9mIGJsZW5kIGZ1bmN0aW9uIGluIFdlYkdMOlxyXG4gICAgICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZ2xlcy9zcGVjcy8yLjAvZXNfZnVsbF9zcGVjXzIuMC4yNS5wZGZcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEV4YW1wbGUgOlxyXG4gICAgICAgICAqIGZ1bmN0aW9uKF9nbCkge1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRFcXVhdGlvbihfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRGdW5jKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgKiB9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHVwZGF0ZSB0ZXh0dXJlIHN0YXR1cyBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9VcGRhdGVUZXh0dXJlU3RhdHVzOiB0cnVlLFxyXG5cclxuICAgICAgICB1bmlmb3Jtczoge30sXHJcbiAgICAgICAgdmVydGV4RGVmaW5lczoge30sXHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7fSxcclxuICAgICAgICBfdGV4dHVyZVN0YXR1czoge30sXHJcblxyXG4gICAgICAgIC8vIHNoYWRvd1RyYW5zcGFyZW50TWFwIDogbnVsbFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIGVuYWJsZSB0aGUgdW5pZm9ybSB0aGF0IG9ubHkgdXNlZCBpbiBzaGFkZXIuXHJcbiAgICAgICAgX2VuYWJsZWRVbmlmb3JtczogbnVsbCxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ01BVEVSSUFMXycgKyB0aGlzLl9fdWlkX187XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hhZGVyKSB7XHJcbiAgICAgICAgLy8gS2VlcCBzdGF0dXMsIG1haW5seSBwcmVzZXQgdW5pZm9ybXMsIHZlcnRleERlZmluZXMgYW5kIGZyYWdtZW50RGVmaW5lc1xyXG4gICAgICAgIHRoaXMuYXR0YWNoU2hhZGVyKHRoaXMuc2hhZGVyLCB0cnVlKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lk1hdGVyaWFsLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWF0ZXJpYWwgdW5pZm9ybVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBtYXQuc2V0VW5pZm9ybSgnY29sb3InLCBbMSwgMSwgMSwgMV0pO1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ8YXJyYXl8Y2xheS5UZXh0dXJlfEFycmF5QnVmZmVyVmlld30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuaWZvcm0gdmFsdWUgXCInICsgc3ltYm9sICsgJ1wiIGlzIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGNvbG9yLiBJbnZhbGlkIGNvbG9yIHN0cmluZyB3aWxsIHJldHVybiBudWxsLlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUNvbG9yKHZhbHVlKSB8fCB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdW5pZm9ybS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXMgJiYgdW5pZm9ybS50eXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybXM6IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVW5pZm9ybUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmluZGV4T2Yoc3ltYm9sKSA+PSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRFbmFibGVkVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zO1xyXG4gICAgfSxcclxuICAgIGdldFRleHR1cmVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlVW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygc2V0VW5pZm9ybSBhbmQgc2V0VW5pZm9ybXNcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSBbdmFsdWVdXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHN5bWJvbCkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBzeW1ib2xba2V5XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShzeW1ib2wsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdW5pZm9ybSB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fVxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRhY2ggYSBzaGFkZXIgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2hhZGVyfSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGtlZXBTdGF0dXMgSWYgdHJ5IHRvIGtlZXAgdW5pZm9ybSBhbmQgdGV4dHVyZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTaGFkZXI6IGZ1bmN0aW9uKHNoYWRlciwga2VlcFN0YXR1cykge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbFVuaWZvcm1zID0gdGhpcy51bmlmb3JtcztcclxuXHJcbiAgICAgICAgLy8gSWdub3JlIGlmIHVuaWZvcm0gY2FuIHVzZSBpbiBzaGFkZXIuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtcyA9IHNoYWRlci5jcmVhdGVVbmlmb3JtcygpO1xyXG4gICAgICAgIHRoaXMuc2hhZGVyID0gc2hhZGVyO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3JtcyA9IE9iamVjdC5rZXlzKHVuaWZvcm1zKTtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdW5pZm9ybXMgYXJlIHNldCBpbiBzYW1lIG9yZGVyIHRvIGF2b2lkIHRleHR1cmUgc2xvdCB3cm9uZ1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5zb3J0KCk7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVVuaWZvcm1zID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmZpbHRlcihmdW5jdGlvbiAodW5pZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3QnIHx8IHR5cGUgPT09ICd0dic7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHZhciBvcmlnaW5hbFZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcblxyXG4gICAgICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIuZnJhZ21lbnREZWZpbmVzKTtcclxuXHJcbiAgICAgICAgaWYgKGtlZXBTdGF0dXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIG9yaWdpbmFsVW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3Jtc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IG9yaWdpbmFsVW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLnZlcnRleERlZmluZXMsIG9yaWdpbmFsVmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHModGhpcy5mcmFnbWVudERlZmluZXMsIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNoYWRlci50ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICBzaGFkZXJUeXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS5zaGFkZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogc2hhZGVyLnRleHR1cmVzW2tleV0udHlwZSxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IChrZWVwU3RhdHVzICYmIHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XSkgPyB0aGlzLl90ZXh0dXJlU3RhdHVzW2tleV0uZW5hYmxlZCA6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU3RhdHVzID0gdGV4dHVyZVN0YXR1cztcclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IG1hdGVyaWFsIGFuZCBrZWVwIHVuaWZvcm1zLCBzaGFkZXIgd2lsbCBub3QgYmUgY2xvbmVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuc2hhZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gdGhpcy5kZXB0aE1hc2s7XHJcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xyXG4gICAgICAgIG1hdGVyaWFsLmJsZW5kID0gdGhpcy5ibGVuZDtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy52ZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHRoaXMuZnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlKHRoaXMuZ2V0RW5hYmxlZFRleHR1cmVzKCkpO1xyXG4gICAgICAgIG1hdGVyaWFsLnByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdmFyIHZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIGZyYWdtZW50RGVmaW5lcyA9IHRoaXMuZnJhZ21lbnREZWZpbmVzO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAndmVydGV4JyAmJiBzaGFkZXJUeXBlICE9PSAnZnJhZ21lbnQnICYmIHNoYWRlclR5cGUgIT09ICdib3RoJ1xyXG4gICAgICAgICAgICAmJiBhcmd1bWVudHMubGVuZ3RoIDwgM1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBzaGFkZXJUeXBlIGRlZmF1bHQgdG8gYmUgJ2JvdGgnXHJcbiAgICAgICAgICAgIHZhbCA9IHN5bWJvbDtcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gdmFsICE9IG51bGwgPyB2YWwgOiBudWxsO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAndmVydGV4JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzW3N5bWJvbF0gPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAvLyBNYXJrIGFzIGRpcnR5XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmIChmcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICBmcmFnbWVudERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIHVuZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAyXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ3ZlcnRleCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZWZpbmVkKCdmcmFnbWVudCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBtYWNybyBpcyBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBpc0RlZmluZWQ6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICAvLyBQRU5ESU5HIGhhc093blByb3BlcnR5ID9cclxuICAgICAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWNybyB2YWx1ZSBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBnZXREZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBzd2l0Y2goc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgYSB0ZXh0dXJlLCBhY3R1YWxseSBpdCB3aWxsIGFkZCBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGV4dHVyZSBzeW1ib2wgaXMgZGlmZnVzZU1hcCwgaXQgd2lsbCBhZGQgYSBsaW5lIGAjZGVmaW5lIERJRkZVU0VNQVBfRU5BQkxFRGAgaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBlbmFibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0VuYWJsZWQgPSBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cy5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmVzQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYSB0ZXh0dXJlLCBpdCByZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHRoZSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2xbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICB2YXIgaXNEaXNhYmxlZCA9ICEgc3RhdHVzLmVuYWJsZWQ7XHJcbiAgICAgICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYWxsIHRleHR1cmVzIHVzZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICovXHJcbiAgICBkaXNhYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIElmIHRleHR1cmUgb2YgZ2l2ZW4gdHlwZSBpcyBlbmFibGVkLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgc3ltYm9sXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1RleHR1cmVFbmFibGVkOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIHJldHVybiAhIXRleHR1cmVTdGF0dXNbc3ltYm9sXVxyXG4gICAgICAgICAgICAmJiB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxsIGVuYWJsZWQgdGV4dHVyZXNcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkVGV4dHVyZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5hYmxlZFRleHR1cmVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgZGVmaW5lcyBhcmUgdXBkYXRlZC5cclxuICAgICAqL1xyXG4gICAgZGlydHlEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9ncmFtS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSBnZXRQcm9ncmFtS2V5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzLCB0aGlzLmZyYWdtZW50RGVmaW5lcywgdGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbUtleTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRlcmlhbDtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG52YXIgU0hBREVSX1NUQVRFX1RPX0VOQUJMRSA9IDE7XHJcbnZhciBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEUgPSAyO1xyXG52YXIgU0hBREVSX1NUQVRFX1BFTkRJTkcgPSAzO1xyXG5cclxuLy8gRW5hYmxlIGF0dHJpYnV0ZSBvcGVyYXRpb24gaXMgZ2xvYmFsIHRvIGFsbCBwcm9ncmFtc1xyXG4vLyBIZXJlIHNhdmVkIHRoZSBsaXN0IG9mIGFsbCBlbmFibGVkIGF0dHJpYnV0ZSBpbmRleFxyXG4vLyBodHRwOi8vd3d3Lm1qYnNoYXcuY29tLzIwMTMvMDMvd2ViZ2wtZml4aW5nLWludmFsaWRvcGVyYXRpb24uaHRtbFxyXG52YXIgZW5hYmxlZEF0dHJpYnV0ZUxpc3QgPSB7fTtcclxuXHJcbi8vIHNvbWUgdXRpbCBmdW5jdGlvbnNcclxuZnVuY3Rpb24gYWRkTGluZU51bWJlcnMoc3RyaW5nKSB7XHJcbiAgICB2YXIgY2h1bmtzID0gc3RyaW5nLnNwbGl0KCdcXG4nKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBpbDsgaSArKykge1xyXG4gICAgICAgIC8vIENocm9tZSByZXBvcnRzIHNoYWRlciBlcnJvcnMgb24gbGluZXNcclxuICAgICAgICAvLyBzdGFydGluZyBjb3VudGluZyBmcm9tIDFcclxuICAgICAgICBjaHVua3NbaV0gPSAoaSArIDEpICsgJzogJyArIGNodW5rc1tpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaHVua3Muam9pbignXFxuJyk7XHJcbn1cclxuXHJcbi8vIFJldHVybiB0cnVlIG9yIGVycm9yIG1zZyBpZiBlcnJvciBoYXBwZW5lZFxyXG5mdW5jdGlvbiBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgc2hhZGVyLCBzaGFkZXJTdHJpbmcpIHtcclxuICAgIGlmICghX2dsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIF9nbC5DT01QSUxFX1NUQVRVUykpIHtcclxuICAgICAgICByZXR1cm4gW19nbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlciksIGFkZExpbmVOdW1iZXJzKHNoYWRlclN0cmluZyldLmpvaW4oJ1xcbicpO1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgdG1wRmxvYXQzMkFycmF5MTYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSgxNik7XHJcblxyXG52YXIgR0xQcm9ncmFtID0gQmFzZS5leHRlbmQoe1xyXG5cclxuICAgIHVuaWZvcm1TZW1hbnRpY3M6IHt9LFxyXG4gICAgYXR0cmlidXRlczoge31cclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xvY2F0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuXHJcbiAgICB0aGlzLl9wcm9ncmFtID0gbnVsbDtcclxufSwge1xyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuICAgICAgICByZW5kZXJlci5nbC51c2VQcm9ncmFtKHRoaXMuX3Byb2dyYW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoYXNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fbG9jYXRpb25zW3N5bWJvbF07XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uICE9PSBudWxsICYmIGxvY2F0aW9uICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHVzZVRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNsb3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5hY3RpdmVUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkUwICsgc2xvdCk7XHJcbiAgICAgICAgICAgIC8vIE1heWJlIHRleHR1cmUgaXMgbm90IGxvYWRlZCB5ZXQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNldFRleHR1cmVTbG90OiBmdW5jdGlvbiAoc2xvdCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gc2xvdCB8fCAwO1xyXG4gICAgfSxcclxuXHJcbiAgICB0YWtlQ3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVNsb3QgPSB0aGlzLl90ZXh0dXJlU2xvdDtcclxuXHJcbiAgICAgICAgdGhpcy51c2VUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZVNsb3QpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU2xvdCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChfZ2wsIHR5cGUsIHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25NYXBbc3ltYm9sXTtcclxuICAgICAgICAvLyBVbmlmb3JtIGlzIG5vdCBleGlzdGVkIGluIHRoZSBzaGFkZXJcclxuICAgICAgICBpZiAobG9jYXRpb24gPT09IG51bGwgfHwgbG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbTQnOlxyXG4gICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEZsb2F0MzJBcnJheSBpcyBtdWNoIGZhc3RlciB0aGFuIGFycmF5IHdoZW4gdW5pZm9ybU1hdHJpeDRmdi5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcEZsb2F0MzJBcnJheTE2W2ldID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wRmxvYXQzMkFycmF5MTY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcyaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2knOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGknOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20yJzpcclxuICAgICAgICAgICAgY2FzZSAnbTJ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20zJzpcclxuICAgICAgICAgICAgY2FzZSAnbTN2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ200dic6XHJcbiAgICAgICAgICAgICAgICAvLyBSYXcgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHZhbHVlLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yKytdID0gaXRlbVtqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIGFycmF5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyAgIC8vIEFycmF5QnVmZmVyVmlld1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRVbmlmb3JtT2ZTZW1hbnRpYzogZnVuY3Rpb24gKF9nbCwgc2VtYW50aWMsIHZhbCkge1xyXG4gICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgIGlmIChzZW1hbnRpY0luZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVzZWQgZm9yIGNyZWF0aW5nIFZBT1xyXG4gICAgLy8gRW5hYmxlIHRoZSBhdHRyaWJ1dGVzIHBhc3NlZCBpbiBhbmQgZGlzYWJsZSB0aGUgcmVzdFxyXG4gICAgLy8gRXhhbXBsZSBVc2FnZTpcclxuICAgIC8vIGVuYWJsZUF0dHJpYnV0ZXMocmVuZGVyZXIsIFtcInBvc2l0aW9uXCIsIFwidGV4Y29vcmRzXCJdKVxyXG4gICAgZW5hYmxlQXR0cmlidXRlczogZnVuY3Rpb24gKHJlbmRlcmVyLCBhdHRyaWJMaXN0LCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtO1xyXG5cclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcblxyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dDtcclxuICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dCA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0KSB7XHJcbiAgICAgICAgICAgIC8vIEluIHZlcnRleCBhcnJheSBvYmplY3QgY29udGV4dFxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEVhY2ggdmFvIG9iamVjdCBuZWVkcyB0byBlbmFibGUgYXR0cmlidXRlcyBhZ2Fpbj9cclxuICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IHZhby5fX2VuYWJsZWRBdHRyaWJ1dGVMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBlbmFibGVkQXR0cmlidXRlTGlzdFtyZW5kZXJlci5fX3VpZF9fXVxyXG4gICAgICAgICAgICAgICAgICAgID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmliTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gYXR0cmliTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBfZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIC8vIEF0dHJpYiBsb2NhdGlvbiBpcyBhIG51bWJlciBmcm9tIDAgdG8gLi4uXHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbk1hcFtzeW1ib2xdID0gbG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gbG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX1RPX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSA9IFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBzd2l0Y2goZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0pe1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFOlxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0gPSBTSEFERVJfU1RBVEVfUEVORElORztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIC8vIEV4cGlyZWRcclxuICAgICAgICAgICAgICAgIGNhc2UgU0hBREVSX1NUQVRFX1BFTkRJTkc6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbkxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIGJ1aWxkUHJvZ3JhbTogZnVuY3Rpb24gKF9nbCwgc2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlLCBmcmFnbWVudFNoYWRlckNvZGUpIHtcclxuICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuVkVSVEVYX1NIQURFUik7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSBfZ2wuY3JlYXRlUHJvZ3JhbSgpO1xyXG5cclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuRlJBR01FTlRfU0hBREVSKTtcclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIF9nbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIG1zZyA9IGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCB2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcbiAgICAgICAgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTtcclxuICAgICAgICBfZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcclxuICAgICAgICAvLyBGb3JjZSB0aGUgcG9zaXRpb24gYmluZCB0byBsb2NhdGlvbiAwO1xyXG4gICAgICAgIGlmIChzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1snUE9TSVRJT04nXS5zeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gRWxzZSBjaG9vc2UgYW4gYXR0cmlidXRlIGFuZCBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBrZXlzWzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSBjb2RlLlxyXG4gICAgICAgIHRoaXMudmVydGV4Q29kZSA9IHZlcnRleFNoYWRlckNvZGU7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudENvZGUgPSBmcmFnbWVudFNoYWRlckNvZGU7XHJcblxyXG4gICAgICAgIGlmICghX2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgX2dsLkxJTktfU1RBVFVTKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBsaW5rIHByb2dyYW1cXG4nICsgX2dsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgdW5pZm9ybSBsb2NhdGlvbnNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYWRlci51bmlmb3Jtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVN5bWJvbCA9IHNoYWRlci51bmlmb3Jtc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYXRpb25zW3VuaWZvcm1TeW1ib2xdID0gX2dsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtU3ltYm9sKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMUHJvZ3JhbTsiLCJpbXBvcnQgR0xQcm9ncmFtIGZyb20gJy4vR0xQcm9ncmFtJztcclxuXHJcbnZhciBsb29wUmVnZXggPSAvZm9yXFxzKj9cXChpbnRcXHMqP19pZHhfXFxzKlxcPVxccyooW1xcdy1dKylcXDtcXHMqX2lkeF9cXHMqPFxccyooW1xcdy1dKyk7XFxzKl9pZHhfXFxzKlxcK1xcK1xccypcXClcXHMqXFx7XFx7KFtcXHNcXFNdKz8pKD89XFx9XFx9KVxcfVxcfS9nO1xyXG5cclxuZnVuY3Rpb24gdW5yb2xsTG9vcChzaGFkZXJTdHIsIGRlZmluZXMsIGxpZ2h0c051bWJlcnMpIHtcclxuICAgIC8vIExvb3AgdW5yb2xsIGZyb20gdGhyZWUuanMsIGh0dHBzOi8vZ2l0aHViLmNvbS9tcmRvb2IvdGhyZWUuanMvYmxvYi9tYXN0ZXIvc3JjL3JlbmRlcmVycy93ZWJnbC9XZWJHTFByb2dyYW0uanMjTDE3NVxyXG4gICAgLy8gSW4gc29tZSBjYXNlIGxpa2Ugc2hhZG93TWFwIGluIGxvb3AgdXNlICdpJyB0byBpbmRleCB2YWx1ZSBtdWNoIHNsb3dlci5cclxuXHJcbiAgICAvLyBMb29wIHVzZSBfaWR4XyBhbmQgaW5jcmVhc2VkIHdpdGggX2lkeF8rKyB3aWxsIGJlIHVucm9sbGVkXHJcbiAgICAvLyBVc2Uge3sgfX0gdG8gbWF0Y2ggdGhlIHBhaXIgc28gdGhlIGlmIHN0YXRlbWVudCB3aWxsIG5vdCBiZSBhZmZlY3RlZFxyXG4gICAgLy8gV3JpdGUgbGlrZSBmb2xsb3dpbmdcclxuICAgIC8vIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCA0OyBfaWR4XysrKSB7e1xyXG4gICAgLy8gICAgIHZlYzMgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbX2lkeF9dLCB1dikucmdiO1xyXG4gICAgLy8gfX1cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2UobWF0Y2gsIHN0YXJ0LCBlbmQsIHNuaXBwZXQpIHtcclxuICAgICAgICB2YXIgdW5yb2xsID0gJyc7XHJcbiAgICAgICAgLy8gVHJ5IHRvIHRyZWF0IGFzIGRlZmluZVxyXG4gICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTmFOKGVuZCkpIHtcclxuICAgICAgICAgICAgaWYgKGVuZCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkZWZpbmVzW2VuZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBsaWdodE51bWJlckRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEVycm9yIGNoZWNraW5nXHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IHBhcnNlSW50KHN0YXJ0KTsgaWR4IDwgcGFyc2VJbnQoZW5kKTsgaWR4KyspIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBBZGQgc2NvcGU/XHJcbiAgICAgICAgICAgIHVucm9sbCArPSAneydcclxuICAgICAgICAgICAgICAgICsgc25pcHBldFxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9mbG9hdFxccypcXChcXHMqX2lkeF9cXHMqXFwpL2csIGlkeC50b0ZpeGVkKDEpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9faWR4Xy9nLCBpZHgpXHJcbiAgICAgICAgICAgICsgJ30nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVucm9sbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHROdW1iZXJEZWZpbmVzID0ge307XHJcbiAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgIGxpZ2h0TnVtYmVyRGVmaW5lc1tsaWdodFR5cGUgKyAnX0NPVU5UJ10gPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyLnJlcGxhY2UobG9vcFJlZ2V4LCByZXBsYWNlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGlmIChsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICAgICAgdmFyIGNvdW50ID0gbGlnaHRzTnVtYmVyc1tsaWdodFR5cGVdO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgbGlnaHRUeXBlLnRvVXBwZXJDYXNlKCkgKyAnX0NPVU5UICcgKyBjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbC50b1VwcGVyQ2FzZSgpICsgJ19FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbCArICcgJyArIHZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvZGUoZXh0cykge1xyXG4gICAgLy8gRXh0ZW5zaW9uIGRlY2xhcmF0aW9uIG11c3QgYmVmb3JlIGFsbCBub24tcHJlcHJvY2Vzc29yIGNvZGVzXHJcbiAgICAvLyBUT0RPIHZlcnRleCA/IGV4dGVuc2lvbiBlbnVtID9cclxuICAgIHZhciBleHRlbnNpb25TdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGV4dGVuc2lvblN0ci5wdXNoKCcjZXh0ZW5zaW9uIEdMXycgKyBleHRzW2ldICsgJyA6IGVuYWJsZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4dGVuc2lvblN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJlY2lzaW9uQ29kZShwcmVjaXNpb24pIHtcclxuICAgIHJldHVybiBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2Zsb2F0J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgKyBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2ludCddLmpvaW4oJyAnKSArICc7XFxuJ1xyXG4gICAgICAgIC8vIGRlcHRoIHRleHR1cmUgbWF5IGhhdmUgcHJlY2lzaW9uIHByb2JsZW0gb24gaU9TIGRldmljZS5cclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnc2FtcGxlcjJEJ10uam9pbignICcpICsgJztcXG4nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQcm9ncmFtTWFuYWdlcihyZW5kZXJlcikge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICAgIHRoaXMuX2NhY2hlID0ge307XHJcbn1cclxuXHJcblByb2dyYW1NYW5hZ2VyLnByb3RvdHlwZS5nZXRQcm9ncmFtID0gZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICB2YXIga2V5ID0gJ3MnICsgbWF0ZXJpYWwuc2hhZGVyLnNoYWRlcklEICsgJ20nICsgbWF0ZXJpYWwuZ2V0UHJvZ3JhbUtleSgpO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAga2V5ICs9ICdzZScgKyBzY2VuZS5nZXRQcm9ncmFtS2V5KHJlbmRlcmFibGUubGlnaHRHcm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIGtleSArPSAnLCcgKyByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YXIgcHJvZ3JhbSA9IGNhY2hlW2tleV07XHJcblxyXG4gICAgaWYgKHByb2dyYW0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHRzTnVtYmVycyA9IHNjZW5lID8gc2NlbmUuZ2V0TGlnaHRzTnVtYmVycyhyZW5kZXJhYmxlLmxpZ2h0R3JvdXApIDoge307XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcclxuICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVGV4dHVyZXMoKTtcclxuICAgIHZhciBza2luRGVmaW5lQ29kZSA9ICcnO1xyXG4gICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICB2YXIgc2tpbkRlZmluZXMgPSB7XHJcbiAgICAgICAgICAgIFNLSU5OSU5HOiBudWxsLFxyXG4gICAgICAgICAgICBKT0lOVF9DT1VOVDogcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICBza2luRGVmaW5lcy5VU0VfU0tJTl9NQVRSSUNFU19URVhUVVJFID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBBZGQgc2tpbm5pbmcgY29kZT9cclxuICAgICAgICBza2luRGVmaW5lQ29kZSA9ICdcXG4nICsgZ2V0RGVmaW5lQ29kZShza2luRGVmaW5lcykgKyAnXFxuJztcclxuICAgIH1cclxuICAgIC8vIFRPRE8gT3B0aW1pemUga2V5IGdlbmVyYXRpb25cclxuICAgIC8vIFZFUlRFWFxyXG4gICAgdmFyIHZlcnRleERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpO1xyXG4gICAgLy8gRlJBR01FTlRcclxuICAgIHZhciBmcmFnbWVudERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcblxyXG4gICAgdmFyIHZlcnRleENvZGUgPSB2ZXJ0ZXhEZWZpbmVTdHIgKyAnXFxuJyArIG1hdGVyaWFsLnNoYWRlci52ZXJ0ZXg7XHJcblxyXG4gICAgdmFyIGV4dGVuc2lvbnMgPSBbXHJcbiAgICAgICAgJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycsXHJcbiAgICAgICAgJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnXHJcbiAgICBdLmZpbHRlcihmdW5jdGlvbiAoZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKGV4dCkgIT0gbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9URVhUVVJFX0xPRCc7XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0ZW5zaW9ucy5pbmRleE9mKCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFUyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYWdtZW50Q29kZSA9IGdldEV4dGVuc2lvbkNvZGUoZXh0ZW5zaW9ucykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0UHJlY2lzaW9uQ29kZShtYXRlcmlhbC5wcmVjaXNpb24pICsgJ1xcbidcclxuICAgICAgICArIGZyYWdtZW50RGVmaW5lU3RyICsgJ1xcbidcclxuICAgICAgICArIG1hdGVyaWFsLnNoYWRlci5mcmFnbWVudDtcclxuXHJcbiAgICB2YXIgZmluYWxWZXJ0ZXhDb2RlID0gdW5yb2xsTG9vcCh2ZXJ0ZXhDb2RlLCBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzKTtcclxuICAgIHZhciBmaW5hbEZyYWdtZW50Q29kZSA9IHVucm9sbExvb3AoZnJhZ21lbnRDb2RlLCBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG5cclxuICAgIHZhciBwcm9ncmFtID0gbmV3IEdMUHJvZ3JhbSgpO1xyXG4gICAgcHJvZ3JhbS51bmlmb3JtU2VtYW50aWNzID0gbWF0ZXJpYWwuc2hhZGVyLnVuaWZvcm1TZW1hbnRpY3M7XHJcbiAgICBwcm9ncmFtLmF0dHJpYnV0ZXMgPSBtYXRlcmlhbC5zaGFkZXIuYXR0cmlidXRlcztcclxuICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uYnVpbGRQcm9ncmFtKF9nbCwgbWF0ZXJpYWwuc2hhZGVyLCBmaW5hbFZlcnRleENvZGUsIGZpbmFsRnJhZ21lbnRDb2RlKTtcclxuICAgIHByb2dyYW0uX19lcnJvciA9IGVycm9yTXNnO1xyXG5cclxuICAgIGNhY2hlW2tleV0gPSBwcm9ncmFtO1xyXG5cclxuICAgIHJldHVybiBwcm9ncmFtO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUHJvZ3JhbU1hbmFnZXI7IiwiLyoqXHJcbiAqIE1haW5seSBkbyB0aGUgcGFyc2UgYW5kIGNvbXBpbGUgb2Ygc2hhZGVyIHN0cmluZ1xyXG4gKiBTdXBwb3J0IHNoYWRlciBjb2RlIGNodW5rIGltcG9ydCBhbmQgZXhwb3J0XHJcbiAqIFN1cHBvcnQgc2hhZGVyIHNlbWFudGljc1xyXG4gKiBodHRwOi8vd3d3Lm52aWRpYS5jb20vb2JqZWN0L3VzaW5nX3Nhcy5odG1sXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvY29sbGFkYTJqc29uL2lzc3Vlcy80NVxyXG4gKi9cclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHVuaWZvcm1SZWdleCA9IC91bmlmb3JtXFxzKyhib29sfGZsb2F0fGludHx2ZWMyfHZlYzN8dmVjNHxpdmVjMnxpdmVjM3xpdmVjNHxtYXQyfG1hdDN8bWF0NHxzYW1wbGVyMkR8c2FtcGxlckN1YmUpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxudmFyIGF0dHJpYnV0ZVJlZ2V4ID0gL2F0dHJpYnV0ZVxccysoZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0KVxccysoW1xcc1xcU10qPyk7L2c7XHJcbi8vIE9ubHkgcGFyc2UgbnVtYmVyIGRlZmluZS5cclxudmFyIGRlZmluZVJlZ2V4ID0gLyNkZWZpbmVcXHMrKFxcdyspPyhcXHMrW1xcZC0uXSspP1xccyo7P1xccypcXG4vZztcclxuXHJcbnZhciB1bmlmb3JtVHlwZU1hcCA9IHtcclxuICAgICdib29sJzogJzFpJyxcclxuICAgICdpbnQnOiAnMWknLFxyXG4gICAgJ3NhbXBsZXIyRCc6ICd0JyxcclxuICAgICdzYW1wbGVyQ3ViZSc6ICd0JyxcclxuICAgICdmbG9hdCc6ICcxZicsXHJcbiAgICAndmVjMic6ICcyZicsXHJcbiAgICAndmVjMyc6ICczZicsXHJcbiAgICAndmVjNCc6ICc0ZicsXHJcbiAgICAnaXZlYzInOiAnMmknLFxyXG4gICAgJ2l2ZWMzJzogJzNpJyxcclxuICAgICdpdmVjNCc6ICc0aScsXHJcbiAgICAnbWF0Mic6ICdtMicsXHJcbiAgICAnbWF0Myc6ICdtMycsXHJcbiAgICAnbWF0NCc6ICdtNCdcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVplcm9BcnJheShsZW4pIHtcclxuICAgIHZhciBhcnIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBhcnJbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxufVxyXG5cclxudmFyIHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yID0ge1xyXG4gICAgJ2Jvb2wnOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxyXG4gICAgJ2ludCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnZmxvYXQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiAwOyB9LFxyXG4gICAgJ3NhbXBsZXIyRCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcbiAgICAnc2FtcGxlckN1YmUnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9LFxyXG5cclxuICAgICd2ZWMyJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDIpOyB9LFxyXG4gICAgJ3ZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAndmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnaXZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAnaXZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAnaXZlYzQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcblxyXG4gICAgJ21hdDInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcbiAgICAnbWF0Myc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg5KTsgfSxcclxuICAgICdtYXQ0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDE2KTsgfSxcclxuXHJcbiAgICAnYXJyYXknOiBmdW5jdGlvbiAoKSB7IHJldHVybiBbXTsgfVxyXG59O1xyXG5cclxudmFyIGF0dHJpYnV0ZVNlbWFudGljcyA9IFtcclxuICAgICdQT1NJVElPTicsXHJcbiAgICAnTk9STUFMJyxcclxuICAgICdCSU5PUk1BTCcsXHJcbiAgICAnVEFOR0VOVCcsXHJcbiAgICAnVEVYQ09PUkQnLFxyXG4gICAgJ1RFWENPT1JEXzAnLFxyXG4gICAgJ1RFWENPT1JEXzEnLFxyXG4gICAgJ0NPTE9SJyxcclxuICAgIC8vIFNraW5uaW5nXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWQjc2VtYW50aWNzXHJcbiAgICAnSk9JTlQnLFxyXG4gICAgJ1dFSUdIVCdcclxuXTtcclxudmFyIHVuaWZvcm1TZW1hbnRpY3MgPSBbXHJcbiAgICAnU0tJTl9NQVRSSVgnLFxyXG4gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdmlld3BvcnRcclxuICAgICdWSUVXUE9SVF9TSVpFJyxcclxuICAgICdWSUVXUE9SVCcsXHJcbiAgICAnREVWSUNFUElYRUxSQVRJTycsXHJcbiAgICAvLyBXaW5kb3cgc2l6ZSBmb3Igd2luZG93IHJlbGF0aXZlIGNvb3JkaW5hdGVcclxuICAgIC8vIGh0dHBzOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuL2h0bWwvZ2xfRnJhZ0Nvb3JkLnhodG1sXHJcbiAgICAnV0lORE9XX1NJWkUnLFxyXG4gICAgLy8gSW5mb21hdGlvbiBhYm91dCBjYW1lcmFcclxuICAgICdORUFSJyxcclxuICAgICdGQVInLFxyXG4gICAgLy8gVGltZVxyXG4gICAgJ1RJTUUnXHJcbl07XHJcbnZhciBtYXRyaXhTZW1hbnRpY3MgPSBbXHJcbiAgICAnV09STEQnLFxyXG4gICAgJ1ZJRVcnLFxyXG4gICAgJ1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFVycsXHJcbiAgICAnVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxESU5WRVJTRScsXHJcbiAgICAnVklFV0lOVkVSU0UnLFxyXG4gICAgJ1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFZJRVdJTlZFUlNFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFRSQU5TUE9TRScsXHJcbiAgICAnVklFV1RSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXVFJBTlNQT1NFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnXHJcbl07XHJcblxyXG52YXIgYXR0cmlidXRlU2l6ZU1hcCA9IHtcclxuICAgIC8vIFdlYkdMIGRvZXMgbm90IHN1cHBvcnQgaW50ZWdlciBhdHRyaWJ1dGVzXHJcbiAgICAndmVjNCc6IDQsXHJcbiAgICAndmVjMyc6IDMsXHJcbiAgICAndmVjMic6IDIsXHJcbiAgICAnZmxvYXQnOiAxXHJcbn07XHJcblxyXG5cclxudmFyIHNoYWRlcklEQ2FjaGUgPSB7fTtcclxudmFyIHNoYWRlckNvZGVDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgdmFyIGtleSA9ICd2ZXJ0ZXg6JyArIHZlcnRleCArICdmcmFnbWVudDonICsgZnJhZ21lbnQ7XHJcbiAgICBpZiAoc2hhZGVySURDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNoYWRlcklEQ2FjaGVba2V5XTtcclxuICAgIH1cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgc2hhZGVySURDYWNoZVtrZXldID0gaWQ7XHJcblxyXG4gICAgc2hhZGVyQ29kZUNhY2hlW2lkXSA9IHtcclxuICAgICAgICB2ZXJ0ZXg6IHZlcnRleCxcclxuICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDb21tZW50KGNvZGUpIHtcclxuICAgIHJldHVybiBjb2RlLnJlcGxhY2UoL1sgXFx0XSpcXC9cXC8uKlxcbi9nLCAnJyApICAgLy8gcmVtb3ZlIC8vXHJcbiAgICAgICAgLnJlcGxhY2UoL1sgXFx0XSpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2csICcnICk7IC8vIHJlbW92ZSAvKiAqL1xyXG59XHJcblxyXG5mdW5jdGlvbiBsb2dTeW50YXhFcnJvcigpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoJ1dyb25nIHVuaWZvcm0vYXR0cmlidXRlcyBzeW50YXgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgbGluZSkge1xyXG4gICAgdmFyIHNwZXJhdG9yc1JlZ2V4cCA9IC9bLD1cXChcXCk6XS87XHJcbiAgICB2YXIgdG9rZW5zID0gbGluZVxyXG4gICAgICAgIC8vIENvbnZlcnQgYHN5bWJvbDogWzEsMiwzXWAgdG8gYHN5bWJvbDogdmVjMygxLDIsMylgXHJcbiAgICAgICAgLnJlcGxhY2UoLzpcXHMqXFxbXFxzKiguKilcXHMqXFxdL2csICc9JyArIHR5cGUgKyAnKCQxKScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJycpXHJcbiAgICAgICAgLnNwbGl0KC8oPz1bLD1cXChcXCk6XSkvZyk7XHJcblxyXG4gICAgdmFyIG5ld1Rva2VucyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodG9rZW5zW2ldLm1hdGNoKHNwZXJhdG9yc1JlZ2V4cCkpIHtcclxuICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uY2hhckF0KDApLFxyXG4gICAgICAgICAgICAgICAgdG9rZW5zW2ldLnNsaWNlKDEpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRva2VucyA9IG5ld1Rva2VucztcclxuXHJcbiAgICB2YXIgVFlQRV9TWU1CT0wgPSAwO1xyXG4gICAgdmFyIFRZUEVfQVNTSUdOID0gMTtcclxuICAgIHZhciBUWVBFX1ZFQyA9IDI7XHJcbiAgICB2YXIgVFlQRV9BUlIgPSAzO1xyXG4gICAgdmFyIFRZUEVfU0VNQU5USUMgPSA0O1xyXG4gICAgdmFyIFRZUEVfTk9STUFMID0gNTtcclxuXHJcbiAgICB2YXIgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB2YXIgZGVjbGFyYXRpb25zID0ge307XHJcbiAgICB2YXIgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICB2YXIgY3VycmVudERlY2xhcmF0aW9uO1xyXG5cclxuICAgIGFkZFN5bWJvbCh0b2tlbnNbMF0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFkZFN5bWJvbChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoIXN5bWJvbCkge1xyXG4gICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXJyUmVzdWx0ID0gc3ltYm9sLm1hdGNoKC9cXFsoLio/KVxcXS8pO1xyXG4gICAgICAgIGN1cnJlbnREZWNsYXJhdGlvbiA9IHN5bWJvbC5yZXBsYWNlKC9cXFsoLio/KVxcXS8sICcnKTtcclxuICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXSA9IHt9O1xyXG4gICAgICAgIGlmIChhcnJSZXN1bHQpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaXNBcnJheSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmFycmF5U2l6ZSA9IGFyclJlc3VsdFsxXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XHJcbiAgICAgICAgaWYgKCF0b2tlbikgeyAgIC8vIEVtcHR5IHRva2VuO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRva2VuID09PSAnPScpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9TWU1CT0xcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX0FSUikge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfQVNTSUdOO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnOicpIHtcclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9TRU1BTlRJQztcclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJywnKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgPT09IFRZUEVfVkVDKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUucHVzaCgrdG9rZW5zWysraV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9OT1JNQUw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJyknKSB7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoZGVjbGFyYXRpb25WYWx1ZSk7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbi5pbmRleE9mKCd2ZWMnKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgIT09IFRZUEVfQVNTSUdOXHJcbiAgICAgICAgICAgIC8vIENvbXBhdGl0YWJsZSB3aXRoIG9sZCBzeW50YXggYHN5bWJvbDogWzEsMiwzXWBcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9WRUM7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9BU1NJR04pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSB0b2tlbiA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBwYXJzZUZsb2F0KHRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9TRU1BTlRJQykge1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB0b2tlbjtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICAgICB8fCB1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uc2VtYW50aWMgPSBzZW1hbnRpYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ2lnbm9yZScgfHwgc2VtYW50aWMgPT09ICd1bmNvbmZpZ3VyYWJsZScpIHtcclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmlnbm9yZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgYSBkZWZhdWx0IHR2YWx1ZS5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHNlbWFudGljID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQoc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJlYXQgYXMgc3ltYm9sLlxyXG4gICAgICAgIGFkZFN5bWJvbCh0b2tlbik7XHJcbiAgICAgICAgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9ucztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGFsaWFzIGNsYXkuU2hhZGVyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50XHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIHBob25nIHNoYWRlclxyXG4gKiB2YXIgc2hhZGVyID0gbmV3IGNsYXkuU2hhZGVyKFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSxcclxuICogICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKVxyXG4gKiApO1xyXG4gKi9cclxuZnVuY3Rpb24gU2hhZGVyKHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIC8vIEZpcnN0IGFyZ3VtZW50IGNhbiBiZSB7IHZlcnRleCwgZnJhZ21lbnQgfVxyXG4gICAgaWYgKHR5cGVvZiB2ZXJ0ZXggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgZnJhZ21lbnQgPSB2ZXJ0ZXguZnJhZ21lbnQ7XHJcbiAgICAgICAgdmVydGV4ID0gdmVydGV4LnZlcnRleDtcclxuICAgIH1cclxuXHJcbiAgICB2ZXJ0ZXggPSByZW1vdmVDb21tZW50KHZlcnRleCk7XHJcbiAgICBmcmFnbWVudCA9IHJlbW92ZUNvbW1lbnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIHRoaXMuX3NoYWRlcklEID0gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh2ZXJ0ZXgpO1xyXG4gICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KGZyYWdtZW50KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY3MgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY0tleXMgPSBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVRlbXBsYXRlcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRleHR1cmVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRleERlZmluZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0ge307XHJcblxyXG4gICAgdGhpcy5fcGFyc2VBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLl9wYXJzZVVuaWZvcm1zKCk7XHJcbiAgICB0aGlzLl9wYXJzZURlZmluZXMoKTtcclxufVxyXG5cclxuU2hhZGVyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogU2hhZGVyLFxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyB1bmlmb3JtIGluc3RhbmNlIGZvciBtYXRlcmlhbFxyXG4gICAgY3JlYXRlVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybVRlbXBsYXRlcyl7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gdGhpcy51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHBsLnR5cGUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5pZm9ybVRwbC52YWx1ZSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUltcG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQodGhpcy52ZXJ0ZXgpO1xyXG4gICAgICAgIHRoaXMuX2ZyYWdtZW50Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLmZyYWdtZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbWFudGljVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdW5pZm9ybVR5cGUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgLy8gVGhpcyBjYXNlIGlzIG9ubHkgZm9yIFNLSU5fTUFUUklYXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBpc1RyYW5zcG9zZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICBpZiAoc2VtYW50aWMubWF0Y2goL1RSQU5TUE9TRSQvKSkge1xyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljLnNsaWNlKDAsIC05KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2U6IGlzVHJhbnNwb3NlLFxyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZTogc2VtYW50aWNOb1RyYW5zcG9zZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy51bmlmb3JtU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRNYXRlcmlhbFVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLCBpc0FycmF5LCBtYXRlcmlhbFVuaWZvcm1zKSB7XHJcbiAgICAgICAgbWF0ZXJpYWxVbmlmb3Jtc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZSxcclxuICAgICAgICAgICAgdmFsdWU6IGlzQXJyYXkgPyB1bmlmb3JtVmFsdWVDb25zdHJ1Y3RvclsnYXJyYXknXSA6IChkZWZhdWx0VmFsdWVGdW5jIHx8IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yW3R5cGVdKSxcclxuICAgICAgICAgICAgc2VtYW50aWM6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xyXG4gICAgICAgIHRoaXMuX3VuaWZvcm1MaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcblxyXG4gICAgICAgIHNlbGYubWF0cml4U2VtYW50aWNLZXlzID0gT2JqZWN0LmtleXModGhpcy5tYXRyaXhTZW1hbnRpY3MpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBtYWtlRGVmYXVsdFZhbHVlRnVuYyh2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9IDogbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF91bmlmb3JtUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRVbmlmb3JtcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkVW5pZm9ybXMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybUluZm8gPSBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB1bmlmb3JtSW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciB0bXBTdHIgPSBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSB1bmlmb3JtVHlwZU1hcFt0eXBlXTtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0VmFsdWVGdW5jID0gbWFrZURlZmF1bHRWYWx1ZUZ1bmMoZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcFN0ciArPSAnWycgKyBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uYXJyYXlTaXplICsgJ10nO1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1UeXBlICs9ICd2JztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtTWFpblN0ci5wdXNoKHRtcFN0cik7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fdW5pZm9ybUxpc3QucHVzaChzeW1ib2wpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybUluZm8uaWdub3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzYW1wbGVyMkQnIHx8IHR5cGUgPT09ICdzYW1wbGVyQ3ViZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBpcyBkZWZhdWx0IGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dHVyZXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBTaG91bGQgbm90IGRlY2xhcmUgbXVsdGlwbGUgc3ltYm9scyBpZiBoYXZlIHNlbWFudGljLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTZW1hbnRpY1VuaWZvcm0oc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkTWF0ZXJpYWxVbmlmb3JtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLCB0eXBlLCB1bmlmb3JtVHlwZSwgZGVmYXVsdFZhbHVlRnVuYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5LCB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybU1haW5TdHIubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgPyAndW5pZm9ybSAnICsgdHlwZSArICcgJyArIHVuaWZvcm1NYWluU3RyLmpvaW4oJywnKSArICc7XFxuJyA6ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGF0dHJpYnV0ZVJlZ2V4LCBfYXR0cmlidXRlUGFyc2VyKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2F0dHJpYnV0ZVBhcnNlcihzdHIsIHR5cGUsIGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGRlY2xhcmVkQXR0cmlidXRlcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVTaXplTWFwW3R5cGVdIHx8IDE7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVNYWluU3RyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWNsYXJlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IGRlY2xhcmVkQXR0cmlidXRlc1tzeW1ib2xdLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gQ2FuIG9ubHkgYmUgZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZmxvYXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VtYW50aWM6IHNlbWFudGljIHx8IG51bGxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biBzZW1hbnRpYyBcIicgKyBzZW1hbnRpYyArICdcIicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdHRyaWJ1dGVTZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTWFpblN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnYXR0cmlidXRlICcgKyB0eXBlICsgJyAnICsgYXR0cmlidXRlTWFpblN0ci5qb2luKCcsJykgKyAnO1xcbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UoZGVmaW5lUmVnZXgsIF9kZWZpbmVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUGFyc2VyKHN0ciwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgZGVmaW5lcyA9IHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnID8gc2VsZi52ZXJ0ZXhEZWZpbmVzIDogc2VsZi5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgICAgIGlmICghZGVmaW5lc1tzeW1ib2xdKSB7IC8vIEhhdmVuJ3QgYmVlbiBkZWZpbmVkIGJ5IHVzZXJcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVzW3N5bWJvbF0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW4gcGFyc2UgdG8gZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpID8gdmFsdWUudHJpbSgpIDogcGFyc2VGbG9hdCh2YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHNoYWRlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvZGUgPSBzaGFkZXJDb2RlQ2FjaGVbdGhpcy5fc2hhZGVySURdO1xyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGNvZGUudmVydGV4LCBjb2RlLmZyYWdtZW50KTtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdzaGFkZXJJRCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRlcklEO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd2ZXJ0ZXgnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92ZXJ0ZXhDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdmcmFnbWVudCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYWdtZW50Q29kZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAndW5pZm9ybXMnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91bmlmb3JtTGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxudmFyIGltcG9ydFJlZ2V4ID0gLyhAaW1wb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKikvZztcclxuU2hhZGVyLnBhcnNlSW1wb3J0ID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyID0gc2hhZGVyU3RyLnJlcGxhY2UoaW1wb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGltcG9ydFN5bWJvbCwgaW1wb3J0TmFtZSkge1xyXG4gICAgICAgIHZhciBzdHIgPSBTaGFkZXIuc291cmNlKGltcG9ydE5hbWUpO1xyXG4gICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcGFyc2VcclxuICAgICAgICAgICAgcmV0dXJuIFNoYWRlci5wYXJzZUltcG9ydChzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIGNodW5rIFwiJyArIGltcG9ydE5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyO1xyXG59O1xyXG5cclxudmFyIGV4cG9ydFJlZ2V4ID0gLyhAZXhwb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKilcXHMqXFxuKFtcXHNcXFNdKj8pQGVuZC9nO1xyXG5cclxuLyoqXHJcbiAqIEltcG9ydCBzaGFkZXIgc291cmNlXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyWydpbXBvcnQnXSA9IGZ1bmN0aW9uIChzaGFkZXJTdHIpIHtcclxuICAgIHNoYWRlclN0ci5yZXBsYWNlKGV4cG9ydFJlZ2V4LCBmdW5jdGlvbiAoc3RyLCBleHBvcnRTeW1ib2wsIGV4cG9ydE5hbWUsIGNvZGUpIHtcclxuICAgICAgICB2YXIgY29kZSA9IGNvZGUucmVwbGFjZSgvKF5bXFxzXFx0XFx4YTBcXHUzMDAwXSspfChbXFx1MzAwMFxceGEwXFxzXFx0XStcXHgyNCkvZywgJycpO1xyXG4gICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IGV4cG9ydE5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIga2V5O1xyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ialtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGtleSA9IHBhcnRzW2ldO1xyXG4gICAgICAgICAgICBvYmpba2V5XSA9IGNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2RlO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTGlicmFyeSB0byBzdG9yZSBhbGwgdGhlIGxvYWRlZCBzaGFkZXIgY29kZXNcclxuICogQHR5cGUge09iamVjdH1cclxuICogQHJlYWRPbmx5XHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyLmNvZGVzID0ge307XHJcblxyXG4vKipcclxuICogR2V0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcblNoYWRlci5zb3VyY2UgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgIHZhciBpID0gMDtcclxuICAgIHdoaWxlIChvYmogJiYgaSA8IHBhcnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBrZXkgPSBwYXJ0c1tpKytdO1xyXG4gICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgLy8gRklYTUUgVXNlIGRlZmF1bHQgaW5zdGVhZFxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBcIicgKyBuYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZGVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wcmV6LnZlcnRleFxcbnVuaWZvcm0gbWF0NCBXVlAgOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvcyA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2IDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgOiBbMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA6IFswLjAsIDAuMF07XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIFAgPSBwb3M7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBQID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gV1ZQICogdmVjNChQLCAxLjApO1xcbiB2X1RleGNvb3JkID0gdXYgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnByZXouZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBpZiAodGV4dHVyZTJEKGFscGhhTWFwLCB2X1RleGNvb3JkKS5hIDw9IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwwLjAsMC4wLDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7R0xNQVRfRVBTSUxPTiwgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgNHg0IE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQ0XHJcbiAqL1xyXG5cclxudmFyIG1hdDQgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcclxuICpcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgb3V0WzldID0gYVs5XTtcclxuICAgIG91dFsxMF0gPSBhWzEwXTtcclxuICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQ0IHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xyXG4gICAgaWYgKG91dCA9PT0gYSkge1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgICAgICBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGEwMTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGEwMjtcclxuICAgICAgICBvdXRbOV0gPSBhMTI7XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhMDM7XHJcbiAgICAgICAgb3V0WzEzXSA9IGExMztcclxuICAgICAgICBvdXRbMTRdID0gYTIzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbNF07XHJcbiAgICAgICAgb3V0WzJdID0gYVs4XTtcclxuICAgICAgICBvdXRbM10gPSBhWzEyXTtcclxuICAgICAgICBvdXRbNF0gPSBhWzFdO1xyXG4gICAgICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdID0gYVs5XTtcclxuICAgICAgICBvdXRbN10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbOF0gPSBhWzJdO1xyXG4gICAgICAgIG91dFs5XSA9IGFbNl07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTJdID0gYVszXTtcclxuICAgICAgICBvdXRbMTNdID0gYVs3XTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxMV07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcclxuICAgIG91dFsxXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAoYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs0XSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMjAgKiBiMDUgLSBhMjIgKiBiMDIgKyBhMjMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XHJcbiAgICBvdXRbOV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxMF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMl0gPSAoYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxM10gPSAoYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxNV0gPSAoYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICBvdXRbMF0gID0gIChhMTEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzFdICA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFsyXSAgPSAgKGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbM10gID0gLShhMDEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzRdICA9IC0oYTEwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcclxuICAgIG91dFs1XSAgPSAgKGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XHJcbiAgICBvdXRbNl0gID0gLShhMDAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzddICA9ICAoYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFs4XSAgPSAgKGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSk7XHJcbiAgICBvdXRbOV0gID0gLShhMDAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkpO1xyXG4gICAgb3V0WzEwXSA9ICAoYTAwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XHJcbiAgICBvdXRbMTJdID0gLShhMTAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkpO1xyXG4gICAgb3V0WzEzXSA9ICAoYTAwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpKTtcclxuICAgIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICBvdXRbMTVdID0gIChhMDAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSkpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXHJcbm1hdDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgIHJldHVybiBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0NCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcclxuICAgIHZhciBiMCAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzNdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07IGIzID0gYls3XTtcclxuICAgIG91dFs0XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs1XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFs2XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFs3XSA9IGIwKmEwMyArIGIxKmExMyArIGIyKmEyMyArIGIzKmEzMztcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTsgYjMgPSBiWzExXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTFdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07IGIzID0gYlsxNV07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTVdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBhZmZpbmUgbWF0NCdzXHJcbiAqIEFkZCBieSBodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZ1xyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm11bHRpcGx5QWZmaW5lID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzNdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzddID0gMDtcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdO1xyXG4gICAgb3V0WzEyXSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGEzMDtcclxuICAgIG91dFsxM10gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBhMzE7XHJcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYTMyO1xyXG4gICAgLy8gb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQ0Lm11bCA9IG1hdDQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5QWZmaW5lfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsQWZmaW5lID0gbWF0NC5tdWx0aXBseUFmZmluZTtcclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDQgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXSxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMztcclxuXHJcbiAgICBpZiAoYSA9PT0gb3V0KSB7XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGEwMCA9IGFbMF07IGEwMSA9IGFbMV07IGEwMiA9IGFbMl07IGEwMyA9IGFbM107XHJcbiAgICAgICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgICAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgICAgIG91dFswXSA9IGEwMDsgb3V0WzFdID0gYTAxOyBvdXRbMl0gPSBhMDI7IG91dFszXSA9IGEwMztcclxuICAgICAgICBvdXRbNF0gPSBhMTA7IG91dFs1XSA9IGExMTsgb3V0WzZdID0gYTEyOyBvdXRbN10gPSBhMTM7XHJcbiAgICAgICAgb3V0WzhdID0gYTIwOyBvdXRbOV0gPSBhMjE7IG91dFsxMF0gPSBhMjI7IG91dFsxMV0gPSBhMjM7XHJcblxyXG4gICAgICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGEwMiAqIHggKyBhMTIgKiB5ICsgYTIyICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdGhlIHZlYzMgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqKi9cclxubWF0NC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXSwgeiA9IHZbMl07XHJcblxyXG4gICAgb3V0WzBdID0gYVswXSAqIHg7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogeDtcclxuICAgIG91dFsyXSA9IGFbMl0gKiB4O1xyXG4gICAgb3V0WzNdID0gYVszXSAqIHg7XHJcbiAgICBvdXRbNF0gPSBhWzRdICogeTtcclxuICAgIG91dFs1XSA9IGFbNV0gKiB5O1xyXG4gICAgb3V0WzZdID0gYVs2XSAqIHk7XHJcbiAgICBvdXRbN10gPSBhWzddICogeTtcclxuICAgIG91dFs4XSA9IGFbOF0gKiB6O1xyXG4gICAgb3V0WzldID0gYVs5XSAqIHo7XHJcbiAgICBvdXRbMTBdID0gYVsxMF0gKiB6O1xyXG4gICAgb3V0WzExXSA9IGFbMTFdICogejtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCwgYXhpcykge1xyXG4gICAgdmFyIHggPSBheGlzWzBdLCB5ID0gYXhpc1sxXSwgeiA9IGF4aXNbMl0sXHJcbiAgICAgICAgbGVuID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeiksXHJcbiAgICAgICAgcywgYywgdCxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMyxcclxuICAgICAgICBiMDAsIGIwMSwgYjAyLFxyXG4gICAgICAgIGIxMCwgYjExLCBiMTIsXHJcbiAgICAgICAgYjIwLCBiMjEsIGIyMjtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMobGVuKSA8IEdMTUFUX0VQU0lMT04pIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgeCAqPSBsZW47XHJcbiAgICB5ICo9IGxlbjtcclxuICAgIHogKj0gbGVuO1xyXG5cclxuICAgIHMgPSBNYXRoLnNpbihyYWQpO1xyXG4gICAgYyA9IE1hdGguY29zKHJhZCk7XHJcbiAgICB0ID0gMSAtIGM7XHJcblxyXG4gICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgIGExMCA9IGFbNF07IGExMSA9IGFbNV07IGExMiA9IGFbNl07IGExMyA9IGFbN107XHJcbiAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XHJcbiAgICBiMDAgPSB4ICogeCAqIHQgKyBjOyBiMDEgPSB5ICogeCAqIHQgKyB6ICogczsgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICBiMTAgPSB4ICogeSAqIHQgLSB6ICogczsgYjExID0geSAqIHkgKiB0ICsgYzsgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XHJcbiAgICBiMjAgPSB4ICogeiAqIHQgKyB5ICogczsgYjIxID0geSAqIHogKiB0IC0geCAqIHM7IGIyMiA9IHogKiB6ICogdCArIGM7XHJcblxyXG4gICAgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcclxuICAgIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcclxuICAgIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcclxuICAgIG91dFszXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcclxuICAgIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcclxuICAgIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcclxuICAgIG91dFs2XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcclxuICAgIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcclxuICAgIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcclxuICAgIG91dFs5XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcclxuICAgIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XHJcbiAgICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbMF0gID0gYVswXTtcclxuICAgICAgICBvdXRbMV0gID0gYVsxXTtcclxuICAgICAgICBvdXRbMl0gID0gYVsyXTtcclxuICAgICAgICBvdXRbM10gID0gYVszXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzRdID0gYTEwICogYyArIGEyMCAqIHM7XHJcbiAgICBvdXRbNV0gPSBhMTEgKiBjICsgYTIxICogcztcclxuICAgIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xyXG4gICAgb3V0WzddID0gYTEzICogYyArIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcclxuICAgIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xyXG4gICAgb3V0WzEwXSA9IGEyMiAqIGMgLSBhMTIgKiBzO1xyXG4gICAgb3V0WzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMjAgPSBhWzhdLFxyXG4gICAgICAgIGEyMSA9IGFbOV0sXHJcbiAgICAgICAgYTIyID0gYVsxMF0sXHJcbiAgICAgICAgYTIzID0gYVsxMV07XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXHJcbiAgICAgICAgb3V0WzRdICA9IGFbNF07XHJcbiAgICAgICAgb3V0WzVdICA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdICA9IGFbNl07XHJcbiAgICAgICAgb3V0WzddICA9IGFbN107XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xyXG4gICAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcclxuICAgIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xyXG4gICAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XHJcbiAgICBvdXRbOV0gPSBhMDEgKiBzICsgYTIxICogYztcclxuICAgIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcclxuICAgIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGEwMCA9IGFbMF0sXHJcbiAgICAgICAgYTAxID0gYVsxXSxcclxuICAgICAgICBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSxcclxuICAgICAgICBhMTEgPSBhWzVdLFxyXG4gICAgICAgIGExMiA9IGFbNl0sXHJcbiAgICAgICAgYTEzID0gYVs3XTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XHJcbiAgICAgICAgb3V0WzhdICA9IGFbOF07XHJcbiAgICAgICAgb3V0WzldICA9IGFbOV07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjICsgYTExICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjIC0gYTAwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjIC0gYTAzICogcztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICB2YXIgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbiAob3V0LCBxLCB2KSB7XHJcbiAgICAvLyBRdWF0ZXJuaW9uIG1hdGhcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeHkgPSB4ICogeTIsXHJcbiAgICAgICAgeHogPSB4ICogejIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgeXogPSB5ICogejIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcclxuICAgIG91dFsxXSA9IHh5ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB4eiAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHh5IC0gd3o7XHJcbiAgICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xyXG4gICAgb3V0WzZdID0geXogKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4eiArIHd5O1xyXG4gICAgb3V0WzldID0geXogLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0gKHh4ICsgeXkpO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gdlswXTtcclxuICAgIG91dFsxM10gPSB2WzFdO1xyXG4gICAgb3V0WzE0XSA9IHZbMl07XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubWF0NC5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzJdID0genggLSB3eTtcclxuICAgIG91dFszXSA9IDA7XHJcblxyXG4gICAgb3V0WzRdID0geXggLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSB4eCAtIHp6O1xyXG4gICAgb3V0WzZdID0genkgKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcblxyXG4gICAgb3V0WzhdID0genggKyB3eTtcclxuICAgIG91dFs5XSA9IHp5IC0gd3g7XHJcbiAgICBvdXRbMTBdID0gMSAtIHh4IC0geXk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGZydXN0dW0gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcnVzdHVtID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KSxcclxuICAgICAgICB0YiA9IDEgLyAodG9wIC0gYm90dG9tKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAobmVhciAqIDIpICogcmw7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gKG5lYXIgKiAyKSAqIHRiO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xyXG4gICAgb3V0WzldID0gKHRvcCArIGJvdHRvbSkgKiB0YjtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKGZhciAqIG5lYXIgKiAyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbiAob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXHJcbiAgICAgICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xyXG4gICAgb3V0WzBdID0gZiAvIGFzcGVjdDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSBmO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKDIgKiBmYXIgKiBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm9ydGhvID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBsciA9IDEgLyAobGVmdCAtIHJpZ2h0KSxcclxuICAgICAgICBidCA9IDEgLyAoYm90dG9tIC0gdG9wKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAtMiAqIGxyO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IC0yICogYnQ7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDIgKiBuZjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbHI7XHJcbiAgICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcclxuICAgIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lmxvb2tBdCA9IGZ1bmN0aW9uIChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbixcclxuICAgICAgICBleWV4ID0gZXllWzBdLFxyXG4gICAgICAgIGV5ZXkgPSBleWVbMV0sXHJcbiAgICAgICAgZXlleiA9IGV5ZVsyXSxcclxuICAgICAgICB1cHggPSB1cFswXSxcclxuICAgICAgICB1cHkgPSB1cFsxXSxcclxuICAgICAgICB1cHogPSB1cFsyXSxcclxuICAgICAgICBjZW50ZXJ4ID0gY2VudGVyWzBdLFxyXG4gICAgICAgIGNlbnRlcnkgPSBjZW50ZXJbMV0sXHJcbiAgICAgICAgY2VudGVyeiA9IGNlbnRlclsyXTtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXkgLSBjZW50ZXJ5KSA8IEdMTUFUX0VQU0lMT04gJiZcclxuICAgICAgICBNYXRoLmFicyhleWV6IC0gY2VudGVyeikgPCBHTE1BVF9FUFNJTE9OKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuaWRlbnRpdHkob3V0KTtcclxuICAgIH1cclxuXHJcbiAgICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xyXG4gICAgejEgPSBleWV5IC0gY2VudGVyeTtcclxuICAgIHoyID0gZXlleiAtIGNlbnRlcno7XHJcblxyXG4gICAgbGVuID0gMSAvIE1hdGguc3FydCh6MCAqIHowICsgejEgKiB6MSArIHoyICogejIpO1xyXG4gICAgejAgKj0gbGVuO1xyXG4gICAgejEgKj0gbGVuO1xyXG4gICAgejIgKj0gbGVuO1xyXG5cclxuICAgIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcclxuICAgIHgxID0gdXB6ICogejAgLSB1cHggKiB6MjtcclxuICAgIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcclxuICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xyXG4gICAgaWYgKCFsZW4pIHtcclxuICAgICAgICB4MCA9IDA7XHJcbiAgICAgICAgeDEgPSAwO1xyXG4gICAgICAgIHgyID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcclxuICAgICAgICB4MCAqPSBsZW47XHJcbiAgICAgICAgeDEgKj0gbGVuO1xyXG4gICAgICAgIHgyICo9IGxlbjtcclxuICAgIH1cclxuXHJcbiAgICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xyXG4gICAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcclxuICAgIHkyID0gejAgKiB4MSAtIHoxICogeDA7XHJcblxyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHkwICogeTAgKyB5MSAqIHkxICsgeTIgKiB5Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHkwID0gMDtcclxuICAgICAgICB5MSA9IDA7XHJcbiAgICAgICAgeTIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHkwICo9IGxlbjtcclxuICAgICAgICB5MSAqPSBsZW47XHJcbiAgICAgICAgeTIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dFswXSA9IHgwO1xyXG4gICAgb3V0WzFdID0geTA7XHJcbiAgICBvdXRbMl0gPSB6MDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSB4MTtcclxuICAgIG91dFs1XSA9IHkxO1xyXG4gICAgb3V0WzZdID0gejE7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0geDI7XHJcbiAgICBvdXRbOV0gPSB5MjtcclxuICAgIG91dFsxMF0gPSB6MjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IC0oeDAgKiBleWV4ICsgeDEgKiBleWV5ICsgeDIgKiBleWV6KTtcclxuICAgIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XHJcbiAgICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSArIE1hdGgucG93KGFbOV0sIDIpICsgTWF0aC5wb3coYVsxMF0sIDIpICsgTWF0aC5wb3coYVsxMV0sIDIpICsgTWF0aC5wb3coYVsxMl0sIDIpICsgTWF0aC5wb3coYVsxM10sIDIpICsgTWF0aC5wb3coYVsxNF0sIDIpICsgTWF0aC5wb3coYVsxNV0sIDIpICkpXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXQ0OyIsIi8vIFRPRE8gUmVzb3VyY2VzIGxpa2Ugc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSByZWZlcmVuY2UgbWFuYWdlbWVudFxyXG4vLyBUcmFjZSBhbmQgZmluZCBvdXQgd2hpY2ggc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSBjYW4gYmUgZGVzdHJveWVkXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdMSW5mbyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgUHJvZ3JhbU1hbmFnZXIgZnJvbSAnLi9ncHUvUHJvZ3JhbU1hbmFnZXInO1xyXG5cclxuLy8gTGlnaHQgaGVhZGVyXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHByZXpFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgbWF0NENyZWF0ZSA9IG1hdDQuY3JlYXRlO1xyXG5cclxudmFyIGVycm9yU2hhZGVyID0ge307XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0TWF0ZXJpYWwocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdEdldFVuaWZvcm0ocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF0udmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGVkLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElmUmVuZGVyKHJlbmRlcmFibGUpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wKCkge31cclxuXHJcbnZhciBhdHRyaWJ1dGVCdWZmZXJUeXBlTWFwID0ge1xyXG4gICAgZmxvYXQ6IGdsZW51bS5GTE9BVCxcclxuICAgIGJ5dGU6IGdsZW51bS5CWVRFLFxyXG4gICAgdWJ5dGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgc2hvcnQ6IGdsZW51bS5TSE9SVCxcclxuICAgIHVzaG9ydDogZ2xlbnVtLlVOU0lHTkVEX1NIT1JUXHJcbn07XHJcblxyXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChhdmFpbGFibGVBdHRyaWJ1dGVzLCBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCBpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZXMgPSBhdmFpbGFibGVBdHRyaWJ1dGVzO1xyXG4gICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scztcclxuICAgIHRoaXMuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgdGhpcy52YW8gPSBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQbGFjZUhvbGRlclRleHR1cmUocmVuZGVyZXIpIHtcclxuICAgIHZhciBibGFua0NhbnZhcztcclxuICAgIHZhciB3ZWJnbFRleHR1cmU7XHJcbiAgICB0aGlzLmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBpZiAoIWJsYW5rQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRW52aXJvbm1lbnQgbm90IHN1cHBvcnQgY3JlYXRlQ2FudmFzLlxyXG4gICAgICAgICAgICBibGFua0NhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgICAgICAgICAgYmxhbmtDYW52YXMud2lkdGggPSBibGFua0NhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGZpcnN0QmluZCA9ICF3ZWJnbFRleHR1cmU7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB3ZWJnbFRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJsYW5rQ2FudmFzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy51bmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKi9cclxuICAgICAgICBjYW52YXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3dpZHRoOiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2hlaWdodDogMTAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZXZpY2UgcGl4ZWwgcmF0aW8sIHNldCBieSBzZXREZXZpY2VQaXhlbFJhdGlvIG1ldGhvZFxyXG4gICAgICAgICAqIFNwZWNpYWxseSBmb3IgaGlnaCBkZWZpbmF0aW9uIGRpc3BsYXlcclxuICAgICAgICAgKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB8fCAxLjAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENsZWFyIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLjAsIDAuMCwgMC4wLCAwLjBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZhdWx0OlxyXG4gICAgICAgICAqICAgICBfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUIHwgX2dsLlNURU5DSUxfQlVGRkVSX0JJVFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJCaXQ6IDE3NjY0LFxyXG5cclxuICAgICAgICAvLyBTZXR0aW5ncyB3aGVuIGdldHRpbmcgY29udGV4dFxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LyMyLjRcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGFscGhhLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZGVwdGggYnVmZmVyLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aDogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgc3RlbmNpbCBidWZmZXIsIGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGVuY2lsOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYW50aWFsaWFzLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbnRpYWxpYXM6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIHByZW11bHRpcGxpZWQgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBwcmVzZXJ2ZSBkcmF3aW5nIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhyb3cgY29udGV4dCBlcnJvciwgdXN1YWxseSB0dXJuZWQgb24gaW4gZGVidWcgbW9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRocm93RXJyb3I6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2ViR0wgQ29udGV4dCBjcmVhdGVkIGZyb20gZ2l2ZW4gY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnbDogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZW5kZXJlciB2aWV3cG9ydCwgcmVhZC1vbmx5LCBjYW4gYmUgc2V0IGJ5IHNldFZpZXdwb3J0IG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld3BvcnQ6IHt9LFxyXG5cclxuICAgICAgICAvLyBTZXQgYnkgRnJhbWVCdWZmZXIjYmluZFxyXG4gICAgICAgIF9fY3VycmVudEZyYW1lQnVmZmVyOiBudWxsLFxyXG5cclxuICAgICAgICBfdmlld3BvcnRTdGFjazogW10sXHJcbiAgICAgICAgX2NsZWFyU3RhY2s6IFtdLFxyXG5cclxuICAgICAgICBfc2NlbmVSZW5kZXJpbmc6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSB2ZW5kb3IuY3JlYXRlQ2FudmFzKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBvcHRzID0ge1xyXG4gICAgICAgICAgICBhbHBoYTogdGhpcy5hbHBoYSxcclxuICAgICAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsXHJcbiAgICAgICAgICAgIHN0ZW5jaWw6IHRoaXMuc3RlbmNpbCxcclxuICAgICAgICAgICAgYW50aWFsaWFzOiB0aGlzLmFudGlhbGlhcyxcclxuICAgICAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSxcclxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRzKVxyXG4gICAgICAgICAgICB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0cyk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dsaW5mbyA9IG5ldyBHTEluZm8odGhpcy5nbCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdsLnRhcmdldFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FscmVhZHkgY3JlYXRlZCBhIHJlbmRlcmVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyAnRXJyb3IgY3JlYXRpbmcgV2ViR0wgQ29udGV4dCAnICsgZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0IG1hbmFnZXJzXHJcbiAgICB0aGlzLl9wcm9ncmFtTWdyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZSA9IG5ldyBQbGFjZUhvbGRlclRleHR1cmUodGhpcyk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5SZW5kZXJlci5wcm90b3R5cGUuICoqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgY2FudmFzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAvLyBzZXQgdGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGUgY2FudmFzLlxyXG4gICAgICAgIHZhciBkcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGNhbnZhcy5zdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogZHByO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogZHByO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSBjYW52YXMud2lkdGggLyBkcHI7XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KDAsIDAsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciB3aWR0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVuZGVyZXIgaGVpZ2h0XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHZpZXdwb3J0IGFzcGVjdCxcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Vmlld3BvcnRBc3BlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHJldHVybiB2aWV3cG9ydC53aWR0aCAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgc2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24oZGV2aWNlUGl4ZWxSYXRpbykge1xyXG4gICAgICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdGhpcy5yZXNpemUodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKi9cclxuICAgIGdldERldmljZVBpeGVsUmF0aW86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBleHRlbnNpb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdldEdMRXh0ZW5zaW9uOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0RXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHsqfVxyXG4gICAgICovXHJcbiAgICBnZXRHTFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldFBhcmFtZXRlcihuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyaW5nIHZpZXdwb3J0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICAgICAqICAgICAgICBEZWZhdWx0bHkgdXNlIHRoZSByZW5kZXJlcmUgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogICAgICAgIEl0IG5lZWRzIHRvIGJlIDEgd2hlbiBzZXRWaWV3cG9ydCBpcyBjYWxsZWQgYnkgZnJhbWVCdWZmZXJcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIHNldFZpZXdwb3J0KDAsMCx3aWR0aCxoZWlnaHQsMSlcclxuICAgICAqICBzZXRWaWV3cG9ydCh7XHJcbiAgICAgKiAgICAgIHg6IDAsXHJcbiAgICAgKiAgICAgIHk6IDAsXHJcbiAgICAgKiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAqICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgKiAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB4O1xyXG5cclxuICAgICAgICAgICAgeCA9IG9iai54O1xyXG4gICAgICAgICAgICB5ID0gb2JqLnk7XHJcbiAgICAgICAgICAgIHdpZHRoID0gb2JqLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBvYmouaGVpZ2h0O1xyXG4gICAgICAgICAgICBkcHIgPSBvYmouZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB9XHJcbiAgICAgICAgZHByID0gZHByIHx8IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuXHJcbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydChcclxuICAgICAgICAgICAgeCAqIGRwciwgeSAqIGRwciwgd2lkdGggKiBkcHIsIGhlaWdodCAqIGRwclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVXNlIGEgZnJlc2ggbmV3IG9iamVjdCwgbm90IHdyaXRlIHByb3BlcnR5LlxyXG4gICAgICAgIHRoaXMudmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgIHg6IHgsXHJcbiAgICAgICAgICAgIHk6IHksXHJcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwclxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IHZpZXdwb3J0IGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlVmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl92aWV3cG9ydFN0YWNrLnB1c2godGhpcy52aWV3cG9ydCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIHZpZXdwb3J0IGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydFN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCh0aGlzLl92aWV3cG9ydFN0YWNrLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IGNsZWFyIGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlQ2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhclN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICBjbGVhckJpdDogdGhpcy5jbGVhckJpdCxcclxuICAgICAgICAgICAgY2xlYXJDb2xvcjogdGhpcy5jbGVhckNvbG9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIGNsZWFyIGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGVhclN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG9wdCA9IHRoaXMuX2NsZWFyU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG9wdC5jbGVhckNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQml0ID0gb3B0LmNsZWFyQml0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZFNjZW5lUmVuZGVyaW5nOiBmdW5jdGlvbiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbmRlciB0aGUgc2NlbmUgaW4gY2FtZXJhIHRvIHRoZSBzY3JlZW4gb3IgYmluZGVkIG9mZmxpbmUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9ICAgICAgIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gICAgICBjYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbbm90VXBkYXRlU2NlbmVdIElmIG5vdCBjYWxsIHRoZSBzY2VuZS51cGRhdGUgbWV0aG9kcyBpbiB0aGUgcmVuZGVyaW5nLCBkZWZhdWx0IHRydWVcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbcHJlWl0gICAgICAgICAgIElmIHVzZSBwcmVaIG9wdGltaXphdGlvbiwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICogQHJldHVybiB7SVJlbmRlckluZm99XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSwgbm90VXBkYXRlU2NlbmUsIHByZVopIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSB0aGlzLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQml0KSB7XHJcblxyXG4gICAgICAgICAgICAvLyBNdXN0IHNldCBkZXB0aCBhbmQgY29sb3IgbWFzayB0cnVlIGJlZm9yZSBjbGVhclxyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgICAgICB2YXIgbmVlZHNTY2lzc29yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydERwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydC53aWR0aCAhPT0gdGhpcy5fd2lkdGggfHwgdmlld3BvcnQuaGVpZ2h0ICE9PSB0aGlzLl9oZWlnaHRcclxuICAgICAgICAgICAgICAgIHx8ICh2aWV3cG9ydERwciAmJiB2aWV3cG9ydERwciAhPT0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvKVxyXG4gICAgICAgICAgICAgICAgfHwgdmlld3BvcnQueCB8fCB2aWV3cG9ydC55XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbmVlZHNTY2lzc29yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE1NDQ2MDgvaG93LXRvLWNsZWFyLWEtcmVjdGFuZ2xlLWFyZWEtaW4td2ViZ2xcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIHZpZXdwb3J0XHJcbiAgICAgICAgICAgICAgICBfZ2wuZW5hYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnNjaXNzb3Iodmlld3BvcnQueCAqIHZpZXdwb3J0RHByLCB2aWV3cG9ydC55ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LndpZHRoICogdmlld3BvcnREcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZpZXdwb3J0RHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKHRoaXMuY2xlYXJCaXQpO1xyXG4gICAgICAgICAgICBpZiAobmVlZHNTY2lzc29yKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHNjZW5lIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSBwcmVwYXNzIGxpa2Ugc2hhZG93IG1hcFxyXG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGl0IGFnYWluXHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuXHJcbiAgICAgICAgY2FtZXJhID0gY2FtZXJhIHx8IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICBpZiAoIWNhbWVyYSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5cXCd0IGZpbmQgY2FtZXJhIGluIHRoZSBzY2VuZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWwgPSBzY2VuZS5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBwcmUgelxyXG4gICAgICAgIGlmIChwcmVaKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUHJlWihvcGFxdWVMaXN0LCBzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVRVUFMKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aEZ1bmMoX2dsLkxFU1MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBkZXB0aCBvZiB0cmFuc3BhcmVudCBsaXN0LlxyXG4gICAgICAgIHZhciB3b3JsZFZpZXdNYXQgPSBtYXQ0Q3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvc1ZpZXdTcGFjZSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc3BhcmVudExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSB0cmFuc3BhcmVudExpc3RbaV07XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUod29ybGRWaWV3TWF0LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NChwb3NWaWV3U3BhY2UsIHJlbmRlcmFibGUucG9zaXRpb24uYXJyYXksIHdvcmxkVmlld01hdCk7XHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19kZXB0aCA9IHBvc1ZpZXdTcGFjZVsyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBvcGFxdWUgbGlzdFxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhvcGFxdWVMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclBhc3ModHJhbnNwYXJlbnRMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy50cmFuc3BhcmVudFNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjZW5lLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFudXBcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpIHtcclxuICAgICAgICByZW5kZXJNYXRlcmlhbCA9IHJlbmRlck1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyYW1NZ3IuZ2V0UHJvZ3JhbShyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZVByb2dyYW06IGZ1bmN0aW9uIChwcm9ncmFtKSB7XHJcbiAgICAgICAgaWYgKHByb2dyYW0uX19lcnJvcikge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBwcm9ncmFtLl9fZXJyb3I7XHJcbiAgICAgICAgICAgIGlmIChlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXJyb3JTaGFkZXJbcHJvZ3JhbS5fX3VpZF9fXSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50aHJvd0Vycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycm9yTXNnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVQcm9ncmFtczogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdmFyIGdldE1hdGVyaWFsID0gKHBhc3NDb25maWcgJiYgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCkgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHNjZW5lID0gc2NlbmUgfHwgbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyTWF0ZXJpYWwgPSBnZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZSA9IGxpc3RbaSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZKb2ludHNMZW4gPSBwcmV2UmVuZGVyYWJsZS5qb2ludHMgPyBwcmV2UmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludHNMZW4gPSByZW5kZXJhYmxlLmpvaW50cyA/IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgICAgICAvLyBLZWVwIHByb2dyYW0gbm90IGNoYW5nZSBpZiBqb2ludHMsIG1hdGVyaWFsLCBsaWdodEdyb3VwIGFyZSBzYW1lIG9mIHR3byByZW5kZXJhYmxlcy5cclxuICAgICAgICAgICAgICAgIGlmIChqb2ludHNMZW4gPT09IHByZXZKb2ludHNMZW5cclxuICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsID09PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubGlnaHRHcm91cCA9PT0gcHJldlJlbmRlcmFibGUubGlnaHRHcm91cFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcmV2UmVuZGVyYWJsZS5fX3Byb2dyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgc2luZ2xlIHJlbmRlcmFibGUgbGlzdCBpbiBjYW1lcmEgaW4gc2VxdWVuY2VcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJhYmxlW119IGxpc3QgTGlzdCBvZiBhbGwgcmVuZGVyYWJsZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBbY2FtZXJhXSBDYW1lcmEgcHJvdmlkZSB2aWV3IG1hdHJpeCBhbmQgcG9yamVjdGlvbiBtYXRyaXguIEl0IGNhbiBiZSBudWxsLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwYXNzQ29uZmlnXVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0TWF0ZXJpYWxdIEdldCByZW5kZXJhYmxlIG1hdGVyaWFsLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0VW5pZm9ybV0gR2V0IG1hdGVyaWFsIHVuaWZvcm0gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZF0gSWYgbWF0ZXJpYWwgY2hhbmdlZC5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmJlZm9yZVJlbmRlcl0gQmVmb3JlIHJlbmRlciBlYWNoIHJlbmRlcmFibGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5hZnRlclJlbmRlcl0gQWZ0ZXIgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuaWZSZW5kZXJdIElmIHJlbmRlciB0aGUgcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLnNvcnRDb21wYXJlXSBTb3J0IGNvbXBhcmUgZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyUGFzczogZnVuY3Rpb24obGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgcGFzc0NvbmZpZyA9IHBhc3NDb25maWcgfHwge307XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCA9IHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybSA9IHBhc3NDb25maWcuZ2V0VW5pZm9ybSB8fCBkZWZhdWx0R2V0VW5pZm9ybTtcclxuICAgICAgICAvLyBQRU5ESU5HIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkID0gcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZCB8fCBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQ7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5iZWZvcmVSZW5kZXIgPSBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciB8fCBub29wO1xyXG4gICAgICAgIHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgPSBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyIHx8IG5vb3A7XHJcblxyXG4gICAgICAgIHZhciBpZlJlbmRlck9iamVjdCA9IHBhc3NDb25maWcuaWZSZW5kZXIgfHwgZGVmYXVsdElmUmVuZGVyO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2dyYW1zKGxpc3QsIHRoaXMuX3NjZW5lUmVuZGVyaW5nLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICBpZiAocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSkge1xyXG4gICAgICAgICAgICBsaXN0LnNvcnQocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTb21lIGNvbW1vbiBidWlsdGluIHVuaWZvcm1zXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydDtcclxuICAgICAgICB2YXIgdkRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0VW5pZm9ybSA9IFtcclxuICAgICAgICAgICAgdmlld3BvcnQueCAqIHZEcHIsIHZpZXdwb3J0LnkgKiB2RHByLFxyXG4gICAgICAgICAgICB2aWV3cG9ydC53aWR0aCAqIHZEcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZEcHJcclxuICAgICAgICBdO1xyXG4gICAgICAgIHZhciB3aW5kb3dEcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHdpbmRvd1NpemVVbmlmb3JtID0gdGhpcy5fX2N1cnJlbnRGcmFtZUJ1ZmZlclxyXG4gICAgICAgICAgICA/IFt0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVXaWR0aCgpLCB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVIZWlnaHQoKV1cclxuICAgICAgICAgICAgOiBbdGhpcy5fd2lkdGggKiB3aW5kb3dEcHIsIHRoaXMuX2hlaWdodCAqIHdpbmRvd0Rwcl07XHJcbiAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgIHZhciB2aWV3cG9ydFNpemVVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydFVuaWZvcm1bMl0sIHZpZXdwb3J0VW5pZm9ybVszXVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdmlldyBhbmQgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5QUk9KRUNUSU9OLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXSU5WRVJTRSwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFVyk7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFV0lOVkVSU0UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5QUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5QUk9KRUNUSU9OSU5WRVJTRSwgbWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTik7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lUmVuZGVyaW5nO1xyXG5cclxuICAgICAgICB2YXIgcHJldk1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBwcmV2UHJvZ3JhbTtcclxuICAgICAgICB2YXIgcHJldlJlbmRlcmFibGU7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHZhciBkZXB0aFRlc3QsIGRlcHRoTWFzaztcclxuICAgICAgICB2YXIgY3VsbGluZywgY3VsbEZhY2UsIGZyb250RmFjZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIGRyYXdJRDtcclxuICAgICAgICB2YXIgY3VycmVudFZBTztcclxuICAgICAgICB2YXIgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICAvLyB2YXIgdmFvRXh0ID0gdGhpcy5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAvLyBub3QgdXNlIHZhb0V4dCwgc29tZSBwbGF0Zm9ybXMgbWF5IG1lc3MgaXQgdXAuXHJcbiAgICAgICAgdmFyIHZhb0V4dCA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpc1NjZW5lTm9kZSA9IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0gIT0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHdvcmxkTTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaWZSZW5kZXJPYmplY3QocmVuZGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCB0cmFuc2Zvcm1lZCB0byBqb2ludCBzcGFjZS4gSWdub3JlIHRoZSBtZXNoIHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHdvcmxkTSA9IChyZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBtYXRyaWNlcy5JREVOVElUWSA6IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgdmFyIHNoYWRlciA9IG1hdGVyaWFsLnNoYWRlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RHJhd0lEID0gZ2VvbWV0cnkuX191aWRfXyArICctJyArIHByb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgdmFyIGRyYXdJRENoYW5nZWQgPSBjdXJyZW50RHJhd0lEICE9PSBkcmF3SUQ7XHJcbiAgICAgICAgICAgIGRyYXdJRCA9IGN1cnJlbnREcmF3SUQ7XHJcbiAgICAgICAgICAgIGlmIChkcmF3SURDaGFuZ2VkICYmIHZhb0V4dCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBTZWVtcyBuZWVkIHRvIGJlIGJvdW5kIHRvIG51bGwgaW1tZWRpYXRlbHkgKG9yIGJlZm9yZSBiaW5kIGFub3RoZXIgcHJvZ3JhbT8pIGlmIHZhbyBpcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLldPUkxELCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTiwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUobWF0cmljZXMuV09STERWSUVXLCBtYXRyaWNlcy5WSUVXLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRElOVkVSU0UsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXSU5WRVJTRSwgbWF0cmljZXMuV09STERWSUVXKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyICYmIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyKHRoaXMpO1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW1DaGFuZ2VkID0gcHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyBudW1iZXJcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVCcsIHZpZXdwb3J0VW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1dJTkRPV19TSVpFJywgd2luZG93U2l6ZVVuaWZvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnTkVBUicsIGNhbWVyYS5uZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0ZBUicsIGNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdERVZJQ0VQSVhFTFJBVElPJywgdkRwcik7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1RJTUUnLCB0aW1lKTtcclxuICAgICAgICAgICAgICAgIC8vIERFUFJFQ0FURURcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlRfU0laRScsIHZpZXdwb3J0U2l6ZVVuaWZvcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCBsaWdodHMgdW5pZm9ybXNcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgb3B0aW1pemVkXHJcbiAgICAgICAgICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZS5zZXRMaWdodFVuaWZvcm1zKHByb2dyYW0sIHJlbmRlcmFibGUubGlnaHRHcm91cCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtID0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByb2dyYW0gY2hhbmdlcyBhbHNvIG5lZWRzIHJlc2V0IHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCB8fCBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWxcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoVGVzdCAhPT0gZGVwdGhUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID8gX2dsLmVuYWJsZShfZ2wuREVQVEhfVEVTVCkgOiBfZ2wuZGlzYWJsZShfZ2wuREVQVEhfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0ID0gbWF0ZXJpYWwuZGVwdGhUZXN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoTWFzayAhPT0gZGVwdGhNYXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRlcHRoTWFzayhtYXRlcmlhbC5kZXB0aE1hc2spO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzayA9IG1hdGVyaWFsLmRlcHRoTWFzaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCAhPT0gdHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA/IF9nbC5lbmFibGUoX2dsLkJMRU5EKSA6IF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2FjaGUgYmxlbmRpbmdcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5ibGVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5ibGVuZChfZ2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBibGVuZCBmdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKF9nbC5GVU5DX0FERCwgX2dsLkZVTkNfQUREKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJsZW5kRnVuY1NlcGFyYXRlKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBfZ2wuT05FLCBfZ2wuT05FX01JTlVTX1NSQ19BTFBIQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsVGFrZXNUZXh0dXJlU2xvdCA9IHRoaXMuX2JpbmRNYXRlcmlhbChcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJvZ3JhbSxcclxuICAgICAgICAgICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSB8fCBudWxsLCBwcmV2TWF0ZXJpYWwgfHwgbnVsbCwgcHJldlByb2dyYW0gfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYXNzQ29uZmlnLmdldFVuaWZvcm1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeFNlbWFudGljS2V5cyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY0tleXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWF0cml4U2VtYW50aWNLZXlzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gbWF0cml4U2VtYW50aWNLZXlzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIubWF0cml4U2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbWF0cmljZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpY0luZm8uaXNUcmFuc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeE5vVHJhbnNwb3NlID0gbWF0cmljZXNbc2VtYW50aWNJbmZvLnNlbWFudGljTm9UcmFuc3Bvc2VdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShtYXRyaXgsIG1hdHJpeE5vVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmN1bGxGYWNlICE9PSBjdWxsRmFjZSkge1xyXG4gICAgICAgICAgICAgICAgY3VsbEZhY2UgPSByZW5kZXJhYmxlLmN1bGxGYWNlO1xyXG4gICAgICAgICAgICAgICAgX2dsLmN1bGxGYWNlKGN1bGxGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5mcm9udEZhY2UgIT09IGZyb250RmFjZSkge1xyXG4gICAgICAgICAgICAgICAgZnJvbnRGYWNlID0gcmVuZGVyYWJsZS5mcm9udEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJvbnRGYWNlKGZyb250RmFjZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbGluZyAhPT0gY3VsbGluZykge1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA9IHJlbmRlcmFibGUuY3VsbGluZztcclxuICAgICAgICAgICAgICAgIGN1bGxpbmcgPyBfZ2wuZW5hYmxlKF9nbC5DVUxMX0ZBQ0UpIDogX2dsLmRpc2FibGUoX2dsLkNVTExfRkFDRSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgdXBkYXRlIHNrZWxldG9uIGluIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2tlbGV0b24ocmVuZGVyYWJsZSwgcHJvZ3JhbSwgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90KTtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRWQU8gPSB0aGlzLl9iaW5kVkFPKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyT2JqZWN0KHJlbmRlcmFibGUsIGN1cnJlbnRWQU8pO1xyXG5cclxuICAgICAgICAgICAgLy8gQWZ0ZXIgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlcih0aGlzLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5hZnRlclJlbmRlciAmJiByZW5kZXJhYmxlLmFmdGVyUmVuZGVyKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgcHJldlByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSBpZiB2YW8gaXMgY2hhbmdlZD9cclxuICAgICAgICBpZiAodmFvRXh0KSB7XHJcbiAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVycGFzcycsIHRoaXMsIGxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1heEpvaW50TnVtYmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRNYXhKb2ludE51bWJlcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlU2tlbGV0b246IGZ1bmN0aW9uIChvYmplY3QsIHByb2dyYW0sIHNsb3QpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBvYmplY3Quc2tlbGV0b247XHJcbiAgICAgICAgLy8gU2V0IHBvc2UgbWF0cmljZXMgb2Ygc2tpbm5lZCBtZXNoXHJcbiAgICAgICAgaWYgKHNrZWxldG9uKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gVXBkYXRlIGJlZm9yZSBjdWxsaW5nLlxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGUoKTtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5qb2ludHMubGVuZ3RoID4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShvYmplY3QuX191aWRfXywgb2JqZWN0LmpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnVzZVRleHR1cmVTbG90KHRoaXMsIHNraW5NYXRyaWNlc1RleHR1cmUsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgJ3NraW5NYXRyaWNlc1RleHR1cmUnLCBzbG90KTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxZicsICdza2luTWF0cmljZXNUZXh0dXJlU2l6ZScsIHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc0FycmF5ID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnU0tJTl9NQVRSSVgnLCBza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJPYmplY3Q6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICB2YXIgZ2xEcmF3TW9kZSA9IHJlbmRlcmFibGUubW9kZTtcclxuICAgICAgICBpZiAoZ2xEcmF3TW9kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGdsRHJhd01vZGUgPSAweDAwMDQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiAoZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVTIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX1NUUklQIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX0xPT1ApIHtcclxuICAgICAgICAvLyAgICAgX2dsLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBpZiAodmFvLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgdmFyIHVpbnRFeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfZWxlbWVudF9pbmRleF91aW50Jyk7XHJcbiAgICAgICAgICAgIHZhciB1c2VVaW50RXh0ID0gdWludEV4dCAmJiAoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KTtcclxuICAgICAgICAgICAgdmFyIGluZGljZXNUeXBlID0gdXNlVWludEV4dCA/IF9nbC5VTlNJR05FRF9JTlQgOiBfZ2wuVU5TSUdORURfU0hPUlQ7XHJcblxyXG4gICAgICAgICAgICBfZ2wuZHJhd0VsZW1lbnRzKGdsRHJhd01vZGUsIHZhby5pbmRpY2VzQnVmZmVyLmNvdW50LCBpbmRpY2VzVHlwZSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBVc2UgdmVydGV4IG51bWJlciBpbiBidWZmZXJcclxuICAgICAgICAgICAgLy8gdmVydGV4Q291bnQgbWF5IGdldCB0aGUgd3JvbmcgdmFsdWUgd2hlbiBnZW9tZXRyeSBmb3JnZXQgdG8gbWFyayBkaXJ0eSBhZnRlciB1cGRhdGVcclxuICAgICAgICAgICAgX2dsLmRyYXdBcnJheXMoZ2xEcmF3TW9kZSwgMCwgZ2VvbWV0cnkudmVydGV4Q291bnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLCBwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBwcmV2UHJvZ3JhbSwgZ2V0VW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgLy8gUEVORElORyBTYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFsIHRha2UgZGlmZmVyZW50IHNsb3Q/XHJcblxyXG4gICAgICAgIC8vIE1heSB1c2Ugc2hhZGVyIG9mIG90aGVyIG1hdGVyaWFsIGlmIHNoYWRlciBjb2RlIGFyZSBzYW1lXHJcbiAgICAgICAgdmFyIHNhbWVQcm9ncmFtID0gcHJldlByb2dyYW0gPT09IHByb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50VGV4dHVyZVNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIHZhciBlbmFibGVkVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyVGV4dHVyZSA9IHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS50eXBlO1xyXG4gICAgICAgICAgICAvLyBOb3QgdXNlIGBpbnN0YW5jZW9mYCB0byBkZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB0ZXh0dXJlIGluIE1hdGVyaWFsI2JpbmQuXHJcbiAgICAgICAgICAgIC8vIFVzZSB0eXBlIGluc3RlYWQsIGluIHNvbWUgY2FzZSB0ZXh0dXJlIG1heSBiZSBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcy5cclxuICAgICAgICAgICAgLy8gVE9ETyBEdWNrIHR5cGUgdmFsaWRhdGUuXHJcbiAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgc2xvdFxyXG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWVbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlW2ldLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGxhY2Vob2xkZXJUZXh0dXJlLl9fc2xvdCA9IC0xO1xyXG5cclxuICAgICAgICAvLyBTZXQgdW5pZm9ybXNcclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGVuYWJsZWRVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybSA9IG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVmFsdWUgPSBnZXRVbmlmb3JtVmFsdWUocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm0udHlwZTtcclxuICAgICAgICAgICAgdmFyIGlzVGV4dHVyZSA9IHVuaWZvcm1UeXBlID09PSAndCc7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXVuaWZvcm1WYWx1ZSB8fCAhdW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgLy8gV2hlbiBiaW5kaW5nIHR3byBtYXRlcmlhbHMgd2l0aCB0aGUgc2FtZSBzaGFkZXJcclxuICAgICAgICAgICAgLy8gTWFueSB1bmlmb3JtcyB3aWxsIGJlIGJlIHNldCB0d2ljZSBldmVuIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZVxyXG4gICAgICAgICAgICAvLyBTbyBhZGQgYSBldmFsdWF0aW9uIHRvIHNlZSBpZiB0aGUgdW5pZm9ybSBpcyByZWFsbHkgbmVlZGVkIHRvIGJlIHNldFxyXG4gICAgICAgICAgICBpZiAocHJldk1hdGVyaWFsICYmIHNhbWVQcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldlVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldlVuaWZvcm1WYWx1ZSB8fCAhcHJldlVuaWZvcm1WYWx1ZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2VW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlVuaWZvcm1WYWx1ZSA9PT0gdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGlsbCB0YWtlIHRoZSBzbG90IHRvIG1ha2Ugc3VyZSBzYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFscyBoYXZlIHNhbWUgc2xvdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2JyAmJiB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gcHJvZ3JhbS5jdXJyZW50VGV4dHVyZVNsb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCBzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7IC8vIFRleHR1cmUgdW5pZm9ybSBpcyBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSB1bmlmb3JtIHVzZSBzYW1lIHRleHR1cmUuLlxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCB1bmlmb3JtVmFsdWUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm1WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIEFycmF5XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uaGFzVW5pZm9ybShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdW5pZm9ybVZhbHVlW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9fc2xvdCA9IHNsb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0ZXh0dXJlLl9fc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxaXYnLCBzeW1ib2wsIGFycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgdW5pZm9ybS50eXBlLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld1Nsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIC8vIFRleHR1cmUgc2xvdCBtYXliZSB1c2VkIG91dCBvZiBtYXRlcmlhbC5cclxuICAgICAgICBwcm9ncmFtLnJlc2V0VGV4dHVyZVNsb3QoY3VycmVudFRleHR1cmVTbG90KTtcclxuICAgICAgICByZXR1cm4gbmV3U2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRWQU86IGZ1bmN0aW9uICh2YW9FeHQsIHNoYWRlciwgZ2VvbWV0cnksIHByb2dyYW0pIHtcclxuICAgICAgICB2YXIgaXNTdGF0aWMgPSAhZ2VvbWV0cnkuZHluYW1pYztcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIHZhb0lkID0gdGhpcy5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciB2YW8gPSBnZW9tZXRyeS5fX3Zhb0NhY2hlW3Zhb0lkXTtcclxuICAgICAgICBpZiAoIXZhbykge1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtzID0gZ2VvbWV0cnkuZ2V0QnVmZmVyQ2h1bmtzKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoIWNodW5rcyB8fCAhY2h1bmtzLmxlbmd0aCkgeyAgLy8gRW1wdHkgbWVzaFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlcnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXR0cmlidXRlQnVmZmVyc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlQnVmZmVySW5mby5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gYXR0cmlidXRlQnVmZmVySW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gc2VtYW50aWNJbmZvICYmIHNlbWFudGljSW5mby5zeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBwcm9ncmFtLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGVCdWZmZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFvID0gbmV3IFZlcnRleEFycmF5T2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdID0gdmFvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmVlZHNCaW5kQXR0cmlidXRlcyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSB2ZXJ0ZXggb2JqZWN0IGFycmF5IGNvc3QgYSBsb3RcclxuICAgICAgICAvLyBTbyB3ZSBkb24ndCB1c2UgaXQgb24gdGhlIGR5bmFtaWMgb2JqZWN0XHJcbiAgICAgICAgaWYgKHZhb0V4dCAmJiBpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAvLyBVc2UgdmVydGV4IGFycmF5IG9iamVjdFxyXG4gICAgICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8xMC9vZXN2ZXJ0ZXhhcnJheW9iamVjdC1leHRlbnNpb24uaHRtbFxyXG4gICAgICAgICAgICBpZiAodmFvLnZhbyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YW8udmFvID0gdmFvRXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8udmFvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gdmFvLmF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSB2YW8uaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IHByb2dyYW0uZW5hYmxlQXR0cmlidXRlcyh0aGlzLCB2YW8uYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scywgKHZhb0V4dCAmJiBpc1N0YXRpYyAmJiB2YW8pKTtcclxuICAgICAgICAgICAgLy8gU2V0dGluZyBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF2YWlsYWJsZUF0dHJpYnV0ZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTGlzdFthXTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXZhaWxhYmxlQXR0cmlidXRlc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlQnVmZmVySW5mby5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdsVHlwZSA9IGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXBbYXR0cmlidXRlQnVmZmVySW5mby50eXBlXSB8fCBfZ2wuRkxPQVQ7XHJcblxyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxvY2F0aW9uLCBzaXplLCBnbFR5cGUsIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbztcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUHJlWjogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgcHJlWlBhc3NNYXRlcmlhbCA9IHRoaXMuX3ByZXpNYXRlcmlhbCB8fCBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9wcmV6TWF0ZXJpYWwgPSBwcmVaUGFzc01hdGVyaWFsO1xyXG5cclxuICAgICAgICBfZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG5cclxuICAgICAgICAvLyBTdGF0dXNcclxuICAgICAgICB0aGlzLnJlbmRlclBhc3MobGlzdCwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLmlnbm9yZVByZVo7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRBID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRCID0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0QS5nZXQoJ2RpZmZ1c2VNYXAnKSAhPT0gbWF0Qi5nZXQoJ2RpZmZ1c2VNYXAnKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRBLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKSAhPT0gKG1hdEIuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmVaUGFzc01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0OiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHNjZW5lLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VTY2VuZTogZnVuY3Rpb24oc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2VOb2RlKHNjZW5lLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBzY2VuZS5kaXNwb3NlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBub2RlLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpZXMsIHRleHR1cmVzIGFuZCBzaGFkZXJzIGF0dGFjaGVkIG9uIGl0IG9yIGl0cyBkZXNjZW5kYW50XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZUdlb21ldHJ5PWZhbHNlXSBJZiBkaXNwb3NlIHRoZSBnZW9tZXRyaWVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZVRleHR1cmU9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIHRleHR1cmVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlTm9kZTogZnVuY3Rpb24ocm9vdCwgZGlzcG9zZUdlb21ldHJ5LCBkaXNwb3NlVGV4dHVyZSkge1xyXG4gICAgICAgIC8vIERldHRhY2hlZCBmcm9tIHBhcmVudFxyXG4gICAgICAgIGlmIChyb290LmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgIHJvb3QuZ2V0UGFyZW50KCkucmVtb3ZlKHJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlzcG9zZWRNYXAgPSB7fTtcclxuICAgICAgICByb290LnRyYXZlcnNlKGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbm9kZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgaWYgKG5vZGUuZ2VvbWV0cnkgJiYgZGlzcG9zZUdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmdlb21ldHJ5LmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2VUZXh0dXJlICYmIG1hdGVyaWFsICYmICFkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmVVbmlmb3JtcyA9IG1hdGVyaWFsLmdldFRleHR1cmVVbmlmb3JtcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybU5hbWUgPSB0ZXh0dXJlVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmRpc3Bvc2UgJiYgdmFsLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsW2tdLmRpc3Bvc2UgJiYgdmFsW2tdLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUGFydGljbGUgc3lzdGVtIGFuZCBBbWJpZW50Q3ViZW1hcCBsaWdodCBuZWVkIHRvIGRpc3Bvc2VcclxuICAgICAgICAgICAgaWYgKG5vZGUuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlR2VvbWV0cnk6IGZ1bmN0aW9uKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VUZXh0dXJlOiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gZnJhbWUgYnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuRnJhbWVCdWZmZXJ9IGZyYW1lQnVmZmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VGcmFtZUJ1ZmZlcjogZnVuY3Rpb24oZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IHNjcmVlbiBjb29yZHMgdG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMoTkRDKVxyXG4gICAgICogU2NyZWVuIGNvb3JkcyBjYW4gZ2V0IGZyb20gbW91c2UgZXZlbnQsIGl0IGlzIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gY2FudmFzIGVsZW1lbnRcclxuICAgICAqIE5EQyBjYW4gYmUgdXNlZCBpbiByYXkgY2FzdGluZyB3aXRoIENhbWVyYS5wcm90b3R5cGUuY2FzdFJheSBtZXRob2RzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgc2NyZWVuVG9OREM6IGZ1bmN0aW9uKHgsIHksIG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEludmVydCB5O1xyXG4gICAgICAgIHkgPSB0aGlzLl9oZWlnaHQgLSB5O1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciBhcnIgPSBvdXQuYXJyYXk7XHJcbiAgICAgICAgYXJyWzBdID0gKHggLSB2aWV3cG9ydC54KSAvIHZpZXdwb3J0LndpZHRoO1xyXG4gICAgICAgIGFyclswXSA9IGFyclswXSAqIDIgLSAxO1xyXG4gICAgICAgIGFyclsxXSA9ICh5IC0gdmlld3BvcnQueSkgLyB2aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICAgICAgYXJyWzFdID0gYXJyWzFdICogMiAtIDE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIE9wYXF1ZSByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geFxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IHlcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUub3BhcXVlU29ydENvbXBhcmUgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAvLyBQcmlvcml0eSByZW5kZXJPcmRlciAtPiBwcm9ncmFtIC0+IG1hdGVyaWFsIC0+IGdlb21ldHJ5XHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgaWYgKHgubWF0ZXJpYWwgPT09IHkubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHgubWF0ZXJpYWwuX191aWRfXyAtIHkubWF0ZXJpYWwuX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtICYmIHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwYXJlbnQgcmVuZGVyYWJsZXMgY29tcGFyZSBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGFcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSBiXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqIEBzdGF0aWNcclxuICovXHJcblJlbmRlcmVyLnRyYW5zcGFyZW50U29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IGRlcHRoIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuXHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fZGVwdGggPT09IHkuX19kZXB0aCkge1xyXG4gICAgICAgICAgICBpZiAoeC5fX3Byb2dyYW0gPT09IHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSAgJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRGVwdGggaXMgbmVnYXRpdmVcclxuICAgICAgICAvLyBTbyBmYXJ0aGVyIG9iamVjdCBoYXMgc21hbGxlciBkZXB0aCB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB4Ll9fZGVwdGggLSB5Ll9fZGVwdGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vLyBUZW1wb3JhcnkgdmFyaWFibGVzXHJcbnZhciBtYXRyaWNlcyA9IHtcclxuICAgIElERU5USVRZOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STEQ6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVc6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRElOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxEVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRElOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpXHJcbn07XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUID0gZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVQgPSBnbGVudW0uU1RFTkNJTF9CVUZGRVJfQklUO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyZXI7XHJcbiIsImltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3IzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqL1xyXG52YXIgVmVjdG9yMyA9IGZ1bmN0aW9uKHgsIHksIHopIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjMsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHksIHogd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHogY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMy5mcm9tVmFsdWVzKHgsIHksIHopO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnksIHRoaXMueik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3Jvc3MgcHJvZHVjdCBvZiBzZWxmIGFuZCBiLCB3cml0dGVuIHRvIGEgVmVjdG9yMyBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2aWRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEb3QgcHJvZHVjdCBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZG90OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWMzLmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2ZWMzLm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHogY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbiAoc2NhbGUpIHtcclxuICAgICAgICB2ZWMzLnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAocykge1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbiAoYiwgcykge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkTGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MyBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybU1hdDModGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24gKHEpIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNuZm9ybSBzZWxmIGludG8gcHJvamVjdGlvbiBzcGFjZSB3aXRoIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBhcHBseVByb2plY3Rpb246IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgIG0gPSBtLmFycmF5O1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgaWYgKG1bMTVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2WzJdO1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKiB3O1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKiB3O1xyXG4gICAgICAgICAgICB2WzJdID0gKG1bMTBdICogdlsyXSArIG1bMTRdKSAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKyBtWzEyXTtcclxuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICsgbVsxM107XHJcbiAgICAgICAgICAgIHZbMl0gPSBtWzEwXSAqIHZbMl0gKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgZXVsZXJGcm9tUXVhdDogZnVuY3Rpb24ocSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbVF1YXQodGhpcywgcSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21NYXQzOiBmdW5jdGlvbiAobSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbU1hdDModGhpcywgbSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yMy5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIHZlYzMuc2V0KG91dC5hcnJheSwgeCwgeSwgeik7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWMzLmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdmlkZSA9IFZlY3RvcjMuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzMubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMy5sZW5ndGggPSBWZWN0b3IzLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMzLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubXVsdGlwbHkgPSBWZWN0b3IzLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMy5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IzLnNxckRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjMuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc3VidHJhY3QgPSBWZWN0b3IzLnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7TWF0cml4M30gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0MyhvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybVF1YXQob3V0LmFycmF5LCBhLmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wKHZhbCwgbWluLCBtYXgpIHtcclxuICAgIHJldHVybiB2YWwgPCBtaW4gPyBtaW4gOiAodmFsID4gbWF4ID8gbWF4IDogdmFsKTtcclxufVxyXG52YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xyXG52YXIgYXNpbiA9IE1hdGguYXNpbjtcclxudmFyIGFicyA9IE1hdGguYWJzO1xyXG4vKipcclxuICogQ29udmVydCBxdWF0ZXJuaW9uIHRvIGV1bGVyIGFuZ2xlXHJcbiAqIFF1YXRlcm5pb24gbXVzdCBiZSBub3JtYWxpemVkXHJcbiAqIEZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEsIG9yZGVyKSB7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHEgPSBxLmFycmF5O1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM107XHJcbiAgICB2YXIgeDIgPSB4ICogeDtcclxuICAgIHZhciB5MiA9IHkgKiB5O1xyXG4gICAgdmFyIHoyID0geiAqIHo7XHJcbiAgICB2YXIgdzIgPSB3ICogdztcclxuXHJcbiAgICB2YXIgb3JkZXIgPSAob3JkZXIgfHwgJ1hZWicpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgLSB5ICogeiksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHogKyB5ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcCgyICogKHggKiB3IC0geSAqIHopLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgKyB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHkgKiB3IC0geiAqIHgpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh6ICogdyAtIHggKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB6ICogeSksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeSAqIHcgLSB4ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHggKiB5ICsgeiAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHogKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB4ICogeiksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHkgKyB6ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3ICsgeSAqIHopLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh6ICogdyAtIHggKiB5KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIG9yZGVyOiAnICsgb3JkZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHJvdGF0aW9uIG1hdHJpeCB0byBldWxlciBhbmdsZVxyXG4gKiBmcm9tIHRocmVlLmpzXHJcbiAqL1xyXG5WZWN0b3IzLmV1bGVyRnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtLCBvcmRlcikge1xyXG4gICAgLy8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcclxuICAgIHZhciB0ZSA9IG0uYXJyYXk7XHJcbiAgICB2YXIgbTExID0gdGVbMF0sIG0xMiA9IHRlWzNdLCBtMTMgPSB0ZVs2XTtcclxuICAgIHZhciBtMjEgPSB0ZVsxXSwgbTIyID0gdGVbNF0sIG0yMyA9IHRlWzddO1xyXG4gICAgdmFyIG0zMSA9IHRlWzJdLCBtMzIgPSB0ZVs1XSwgbTMzID0gdGVbOF07XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcChtMTMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTEzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKC1jbGFtcChtMjMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTIzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKG0xMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAobTMyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigtbTMxLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbigtY2xhbXAobTMxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKG0yMSwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjEpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTIyKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oLWNsYW1wKG0xMiwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTIpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVmVjdG9yMywge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1g6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoLTEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWToge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAtMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9aOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAwLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFVQOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFpFUk86IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjM7XHJcbiIsImltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFF1YXRlcm5pb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuICAgIHcgPSB3ID09PSB1bmRlZmluZWQgPyAxIDogdztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgUXVhdGVybmlvbiwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb24jXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBxdWF0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuUXVhdGVybmlvbi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFF1YXRlcm5pb24sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHcgY29tcG9uZW50IGZyb20geCwgeSwgeiBjb21wb25lbnRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlVzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuY2FsY3VsYXRlVyh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gYXJyWzNdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgUXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBzZWxmIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsXHJcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIGludmVydCBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29uanVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jb25qdWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDM6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDR4NCByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIFRoZSA0dGggY29sdW1uIGFuZCA0dGggcm93IHdpbGwgYmUgZHJvcGVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgbWF0My5mcm9tTWF0NChtMywgbS5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gaWRlbnRpdHkgcXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHF1YXQubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IGEgYW5kIHNlbGZcclxuICAgICAqIFF1YXRlcm5pb24gbXV0aXBseSBpcyBub3QgY29tbXV0YXRpdmUsIHNvIHRoZSByZXN1bHQgb2YgbXV0aXBseUxlZnQgaXMgZGlmZmVyZW50IHdpdGggbXVsdGlwbHkuXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXhpc1xyXG4gICAgICogQHBhcmFtIHJhZFxyXG4gICAgICovXHJcbiAgICByb3RhdGVBeGlzOmZ1bmN0aW9uIChheGlzLHJhZCkge1xyXG5cclxuICAgICAgICB2YXIgcXVhdDIgPSBuZXcgUXVhdGVybmlvbigpLmFycmF5O1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZUF4aXModGhpcy5hcnJheSxxdWF0MixheGlzLHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFggYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWCh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWTogZnVuY3Rpb24gKHJhZCkge1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZVkodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uIChyYWQpIHtcclxuICAgICAgICBxdWF0LnJvdGF0ZVoodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBWZWN0b3IzIGEgdG8gVmVjdG9yMyBiLlxyXG4gICAgICogYSBhbmQgYiBuZWVkcyB0byBiZSBub3JtYWxpemVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGlvblRvOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHF1YXQucm90YXRpb25Ubyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gYXhlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZpZXdcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSByaWdodFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldEF4ZXM6IGZ1bmN0aW9uICh2aWV3LCByaWdodCwgdXApIHtcclxuICAgICAgICBxdWF0LnNldEF4ZXModGhpcy5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHdpdGggYSByb3RhdGlvbiBheGlzIGFuZCByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhpc0FuZ2xlOiBmdW5jdGlvbiAoYXhpcywgcmFkKSB7XHJcbiAgICAgICAgcXVhdC5zZXRBeGlzQW5nbGUodGhpcy5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2xlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5zbGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZXVsZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICAgICAqL1xyXG4gICAgZnJvbUV1bGVyOiBmdW5jdGlvbiAodiwgb3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gUXVhdGVybmlvbi5mcm9tRXVsZXIodGhpcywgdiwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbi8vIEdldHRlciBhbmQgU2V0dGVyXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFF1YXRlcm5pb24ucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzBdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsxXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzJdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB3XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbM107XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzNdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmFkZCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHpcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgd1xyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldCA9IGZ1bmN0aW9uIChvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHF1YXQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jb3B5ID0gZnVuY3Rpb24gKG91dCwgYikge1xyXG4gICAgcXVhdC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY2FsY3VsYXRlVyhvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY29uanVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pZGVudGl0eSA9IGZ1bmN0aW9uIChvdXQpIHtcclxuICAgIHF1YXQuaWRlbnRpdHkob3V0LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0LmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgcmV0dXJuIHF1YXQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5sZW5ndGgoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBRdWF0ZXJuaW9uLmxlbmd0aCA9IFF1YXRlcm5pb24ubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICBxdWF0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zbGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQuc2xlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsdGlwbHkgPSBRdWF0ZXJuaW9uLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGF4aXNcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24gKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQuYXJyYXksIGF4aXMuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubm9ybWFsaXplID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXJMZW4gPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIHF1YXQuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXVhcmVkTGVuZ3RoID0gUXVhdGVybmlvbi5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBtXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uZnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtKSB7XHJcbiAgICBxdWF0LmZyb21NYXQzKG91dC5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2aWV3XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgcmlnaHRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB1cFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldEF4ZXMgPSBmdW5jdGlvbiAob3V0LCB2aWV3LCByaWdodCwgdXApIHtcclxuICAgIHF1YXQuc2V0QXhlcyhvdXQuYXJyYXksIHZpZXcuYXJyYXksIHJpZ2h0LmFycmF5LCB1cC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnJvdGF0aW9uVG8gPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0LnJvdGF0aW9uVG8ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgcXVhdGVybmlvbiBmcm9tIGV1bGVyXHJcbiAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHBhcmFtIHtTdHJpbmd9IG9yZGVyXHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmZyb21FdWxlciA9IGZ1bmN0aW9uIChvdXQsIHYsIG9yZGVyKSB7XHJcblxyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgdiA9IHYuYXJyYXk7XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG4gICAgdmFyIGMxID0gTWF0aC5jb3ModlswXSAvIDIpO1xyXG4gICAgdmFyIGMyID0gTWF0aC5jb3ModlsxXSAvIDIpO1xyXG4gICAgdmFyIGMzID0gTWF0aC5jb3ModlsyXSAvIDIpO1xyXG4gICAgdmFyIHMxID0gTWF0aC5zaW4odlswXSAvIDIpO1xyXG4gICAgdmFyIHMyID0gTWF0aC5zaW4odlsxXSAvIDIpO1xyXG4gICAgdmFyIHMzID0gTWF0aC5zaW4odlsyXSAvIDIpO1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXHJcbiAgICAvLyAgMjA2OTYtZnVuY3Rpb24tdG8tY29udmVydC1iZXR3ZWVuLWRjbS1ldWxlci1hbmdsZXMtcXVhdGVybmlvbnMtYW5kLWV1bGVyLXZlY3RvcnMvXHJcbiAgICAvLyAgY29udGVudC9TcGluQ2FsYy5tXHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUXVhdGVybmlvbjtcclxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDRcclxuICovXHJcbnZhciBNYXRyaXg0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fYXhpc1ggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1kgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1ogPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXg0XHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXg0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQ0LmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB1cHBlciAzeDMgcGFydCBmcm9tIHF1YXRlcm5pb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIG1hdDQuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOiBmdW5jdGlvbihxLCB2KSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gTWF0cml4MmQsIGl0IGlzIHVzZWQgd2hlbiBjb252ZXJ0aW5nIGEgMmQgc2hhcGUgdG8gM2Qgc3BhY2UuXHJcbiAgICAgKiBJbiAzZCBzcGFjZSBpdCBpcyBlcXVpdmFsZW50IHRvIHJhbnNsYXRlIG9uIHh5IHBsYW5lIGFuZCByb3RhdGUgYWJvdXQgeiBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtMmRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbihtMmQpIHtcclxuICAgICAgICBNYXRyaXg0LmZyb21NYXQyZCh0aGlzLCBtMmQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGZydXN0dW0gYm91bmRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LmZydXN0dW0odGhpcy5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBleWVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogZnVuY3Rpb24oZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICAgICAgbWF0NC5sb29rQXQodGhpcy5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5TGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdHRvbVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB0b3BcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgb3J0aG86IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5vcnRobyh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZm92eVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBhc3BlY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcGVyc3BlY3RpdmU6IGZ1bmN0aW9uKGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZSh0aGlzLmFycmF5LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IHJhZCBhYm91dCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkLCBheGlzKSB7XHJcbiAgICAgICAgbWF0NC5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWSBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVaOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVoodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHNjYWxlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHYuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHRyYW5zbGF0ZSBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIGEgbWF0cml4IHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtzY2FsZV1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSByb3RhdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3Rvcn0gcG9zaXRpb25cclxuICAgICAqIEBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21pY3Jvc29mdC54bmEuZnJhbWV3b3JrLm1hdHJpeC5kZWNvbXBvc2UuYXNweFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VNYXRyaXg6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHggPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBtMyA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzY2FsZSwgcm90YXRpb24sIHBvc2l0aW9uKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh4LCBlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeSwgZWxbNF0sIGVsWzVdLCBlbFs2XSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHosIGVsWzhdLCBlbFs5XSwgZWxbMTBdKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzeCA9IHZlYzMubGVuZ3RoKHgpO1xyXG4gICAgICAgICAgICB2YXIgc3kgPSB2ZWMzLmxlbmd0aCh5KTtcclxuICAgICAgICAgICAgdmFyIHN6ID0gdmVjMy5sZW5ndGgoeik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxyXG4gICAgICAgICAgICB2YXIgZGV0ID0gdGhpcy5kZXRlcm1pbmFudCgpO1xyXG4gICAgICAgICAgICBpZiAoZGV0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgc3ggPSAtc3g7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgc2NhbGUuc2V0KHN4LCBzeSwgc3opO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zZXQoZWxbMTJdLCBlbFsxM10sIGVsWzE0XSk7XHJcblxyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBlbCk7XHJcbiAgICAgICAgICAgIC8vIE5vdCBsaWtlIG1hdDQsIG1hdDMgaW4gZ2xtYXRyaXggc2VlbXMgdG8gYmUgcm93LWJhc2VkXHJcbiAgICAgICAgICAgIC8vIFNlZW1zIGZpeGVkIGluIGdsLW1hdHJpeCAyLjIuMlxyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgvaXNzdWVzLzExNFxyXG4gICAgICAgICAgICAvLyBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG5cclxuICAgICAgICAgICAgbTNbMF0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzFdIC89IHN4O1xyXG4gICAgICAgICAgICBtM1syXSAvPSBzeDtcclxuXHJcbiAgICAgICAgICAgIG0zWzNdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s0XSAvPSBzeTtcclxuICAgICAgICAgICAgbTNbNV0gLz0gc3k7XHJcblxyXG4gICAgICAgICAgICBtM1s2XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbN10gLz0gc3o7XHJcbiAgICAgICAgICAgIG0zWzhdIC89IHN6O1xyXG5cclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myhyb3RhdGlvbi5hcnJheSwgbTMpO1xyXG4gICAgICAgICAgICBxdWF0Lm5vcm1hbGl6ZShyb3RhdGlvbi5hcnJheSwgcm90YXRpb24uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgdmFyIHByb3RvID0gTWF0cml4NC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIFogQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWi5zZXQoZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1o7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gSGVyZSBoYXMgYSBwcm9ibGVtXHJcbiAgICAgICAgICAgIC8vIElmIG9ubHkgc2V0IGFuIGl0ZW0gb2YgdmVjdG9yIHdpbGwgbm90IHdvcmtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzhdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbOV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsxMF0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWSBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNZLnNldChlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNZO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbNF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs1XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzZdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFggQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWC5zZXQoZWxbMF0sIGVsWzFdLCBlbFsyXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzBdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbMV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsyXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXg0LmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0NC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGxlZnRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmlnaHRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYm90dG9tXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRvcFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm9ydGhvID0gZnVuY3Rpb24ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5vcnRobyhvdXQuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmb3Z5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGFzcGVjdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnBlcnNwZWN0aXZlID0gZnVuY3Rpb24ob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5wZXJzcGVjdGl2ZShvdXQuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubG9va0F0ID0gZnVuY3Rpb24ob3V0LCBleWUsIGNlbnRlciwgdXApIHtcclxuICAgIG1hdDQubG9va0F0KG91dC5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0NC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bHRpcGx5ID0gTWF0cml4NC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVF1YXQgPSBmdW5jdGlvbihvdXQsIHEpIHtcclxuICAgIG1hdDQuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbihvdXQsIHEsIHYpIHtcclxuICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG00XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmZyb21NYXQyZCA9IGZ1bmN0aW9uKG00LCBtMmQpIHtcclxuICAgIG00Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICB2YXIgbTJkID0gbTJkLmFycmF5O1xyXG4gICAgdmFyIG00ID0gbTQuYXJyYXk7XHJcblxyXG4gICAgbTRbMF0gPSBtMmRbMF07XHJcbiAgICBtNFs0XSA9IG0yZFsyXTtcclxuICAgIG00WzEyXSA9IG0yZFs0XTtcclxuXHJcbiAgICBtNFsxXSA9IG0yZFsxXTtcclxuICAgIG00WzVdID0gbTJkWzNdO1xyXG4gICAgbTRbMTNdID0gbTJkWzVdO1xyXG5cclxuICAgIHJldHVybiBtNDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCwgYXhpcy5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWihvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQ0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQ0LnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxuXHJcbi8qKlxyXG4gKiBBeGlzIGFsaWduZWQgYm91bmRpbmcgYm94XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5Cb3VuZGluZ0JveFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21pbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFttYXhdXHJcbiAqL1xyXG52YXIgQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAobWluLCBtYXgpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5taW4gPSBtaW4gfHwgbmV3IFZlY3RvcjMoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubWF4ID0gbWF4IHx8IG5ldyBWZWN0b3IzKC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG5cclxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xyXG59O1xyXG5cclxuQm91bmRpbmdCb3gucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBCb3VuZGluZ0JveCxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG1pbiBhbmQgbWF4IGNvb3JkcyBmcm9tIGEgdmVydGljZXMgYXJyYXlcclxuICAgICAqIEBwYXJhbSAge2FycmF5fSB2ZXJ0aWNlc1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVGcm9tVmVydGljZXM6IGZ1bmN0aW9uICh2ZXJ0aWNlcykge1xyXG4gICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB2ZXJ0aWNlc1swXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdIDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA8IG1pbkFyclsxXSkgeyBtaW5BcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gdmVydGV4WzJdOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFswXSA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB2ZXJ0ZXhbMF07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMV0gPiBtYXhBcnJbMV0pIHsgbWF4QXJyWzFdID0gdmVydGV4WzFdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzJdID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHZlcnRleFsyXTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5pb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgdW5pb246IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heDtcclxuICAgICAgICB2ZWMzLm1pbihtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMubWF4KG1heC5hcnJheSwgbWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIG9wZXJhdGlvbiB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdGlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWF4KG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5taW4obWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBpbnRlcnNlY3Qgd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuICEgKF9taW5bMF0gPiBfbWF4MlswXSB8fCBfbWluWzFdID4gX21heDJbMV0gfHwgX21pblsyXSA+IF9tYXgyWzJdXHJcbiAgICAgICAgICAgIHx8IF9tYXhbMF0gPCBfbWluMlswXSB8fCBfbWF4WzFdIDwgX21pbjJbMV0gfHwgX21heFsyXSA8IF9taW4yWzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIGFub3RoZXIgYm91bmRpbmcgYm94IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluQm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcblxyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIF9taW4yID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXgyID0gYmJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9taW4yWzBdICYmIF9taW5bMV0gPD0gX21pbjJbMV0gJiYgX21pblsyXSA8PSBfbWluMlsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9tYXgyWzBdICYmIF9tYXhbMV0gPj0gX21heDJbMV0gJiYgX21heFsyXSA+PSBfbWF4MlsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIHBvaW50IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX3AgPSBwLmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gX21pblswXSA8PSBfcFswXSAmJiBfbWluWzFdIDw9IF9wWzFdICYmIF9taW5bMl0gPD0gX3BbMl1cclxuICAgICAgICAgICAgJiYgX21heFswXSA+PSBfcFswXSAmJiBfbWF4WzFdID49IF9wWzFdICYmIF9tYXhbMl0gPj0gX3BbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYm91bmRpbmcgYm94IGlzIGZpbml0ZVxyXG4gICAgICovXHJcbiAgICBpc0Zpbml0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICByZXR1cm4gaXNGaW5pdGUoX21pblswXSkgJiYgaXNGaW5pdGUoX21pblsxXSkgJiYgaXNGaW5pdGUoX21pblsyXSlcclxuICAgICAgICAgICAgJiYgaXNGaW5pdGUoX21heFswXSkgJiYgaXNGaW5pdGUoX21heFsxXSkgJiYgaXNGaW5pdGUoX21heFsyXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybUZyb20odGhpcywgbWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveCBhbmQgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXguXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1Gcm9tOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIGh0dHA6Ly9kZXYudGhlb21hZGVyLmNvbS90cmFuc2Zvcm0tYm91bmRpbmctYm94ZXMvXHJcbiAgICAgICAgdmFyIHhhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeGIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHliID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgemEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHNvdXJjZS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBzb3VyY2UubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB4YVswXSA9IG1bMF0gKiBtaW5bMF07IHhhWzFdID0gbVsxXSAqIG1pblswXTsgeGFbMl0gPSBtWzJdICogbWluWzBdO1xyXG4gICAgICAgICAgICB4YlswXSA9IG1bMF0gKiBtYXhbMF07IHhiWzFdID0gbVsxXSAqIG1heFswXTsgeGJbMl0gPSBtWzJdICogbWF4WzBdO1xyXG5cclxuICAgICAgICAgICAgeWFbMF0gPSBtWzRdICogbWluWzFdOyB5YVsxXSA9IG1bNV0gKiBtaW5bMV07IHlhWzJdID0gbVs2XSAqIG1pblsxXTtcclxuICAgICAgICAgICAgeWJbMF0gPSBtWzRdICogbWF4WzFdOyB5YlsxXSA9IG1bNV0gKiBtYXhbMV07IHliWzJdID0gbVs2XSAqIG1heFsxXTtcclxuXHJcbiAgICAgICAgICAgIHphWzBdID0gbVs4XSAqIG1pblsyXTsgemFbMV0gPSBtWzldICogbWluWzJdOyB6YVsyXSA9IG1bMTBdICogbWluWzJdO1xyXG4gICAgICAgICAgICB6YlswXSA9IG1bOF0gKiBtYXhbMl07IHpiWzFdID0gbVs5XSAqIG1heFsyXTsgemJbMl0gPSBtWzEwXSAqIG1heFsyXTtcclxuXHJcbiAgICAgICAgICAgIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgICAgICBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAgICAgbWluWzBdID0gTWF0aC5taW4oeGFbMF0sIHhiWzBdKSArIE1hdGgubWluKHlhWzBdLCB5YlswXSkgKyBNYXRoLm1pbih6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1pblsxXSA9IE1hdGgubWluKHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1pbih5YVsxXSwgeWJbMV0pICsgTWF0aC5taW4oemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSBNYXRoLm1pbih4YVsyXSwgeGJbMl0pICsgTWF0aC5taW4oeWFbMl0sIHliWzJdKSArIE1hdGgubWluKHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIG1heFswXSA9IE1hdGgubWF4KHhhWzBdLCB4YlswXSkgKyBNYXRoLm1heCh5YVswXSwgeWJbMF0pICsgTWF0aC5tYXgoemFbMF0sIHpiWzBdKSArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBNYXRoLm1heCh4YVsxXSwgeGJbMV0pICsgTWF0aC5tYXgoeWFbMV0sIHliWzFdKSArIE1hdGgubWF4KHphWzFdLCB6YlsxXSkgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWF4WzJdID0gTWF0aC5tYXgoeGFbMl0sIHhiWzJdKSArIE1hdGgubWF4KHlhWzJdLCB5YlsyXSkgKyBNYXRoLm1heCh6YVsyXSwgemJbMl0pICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIHByb2plY3Rpb24gbWF0cml4IHRvIHRoZSBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBtID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIG1pbiBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MTAgPSBtaW5bMF07XHJcbiAgICAgICAgdmFyIHYxMSA9IG1pblsxXTtcclxuICAgICAgICB2YXIgdjEyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MjAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYyMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjIyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtYXggelxyXG4gICAgICAgIHZhciB2MzAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYzMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjMyID0gbWF4WzJdO1xyXG5cclxuICAgICAgICBpZiAobVsxNV0gPT09IDEpIHsgIC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBtWzEwXSAqIHYxMiArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYzMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjMxICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IG1bMTBdICogdjMyICsgbVsxNF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdyA9IC0xIC8gdjEyO1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBtWzBdICogdjEwICogdztcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSAqIHc7XHJcbiAgICAgICAgICAgIG1heFsyXSA9IChtWzEwXSAqIHYxMiArIG1bMTRdKSAqIHc7XHJcblxyXG4gICAgICAgICAgICB3ID0gLTEgLyB2MjI7XHJcbiAgICAgICAgICAgIG1heFswXSA9IG1bMF0gKiB2MjAgKiB3O1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjIxICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYzMjtcclxuICAgICAgICAgICAgbWluWzJdID0gKG1bMTBdICogdjMyICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5taW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmICghdmVydGljZXMpIHtcclxuICAgICAgICAgICAgLy8gQ3ViZSB2ZXJ0aWNlc1xyXG4gICAgICAgICAgICB2ZXJ0aWNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBFaWdodCBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAvLy0tLSBtaW4gelxyXG4gICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgbWluWzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBtYXhbMF0sIG1heFsxXSwgbWluWzJdKTtcclxuXHJcbiAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzNDb3B5KG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzNDb3B5KG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IGJvdW5kaW5nIGJveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICBib3VuZGluZ0JveC5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJvdW5kaW5nQm94O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFF1YXRlcm5pb24gZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxudmFyIG5hbWVJZCA9IDA7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE5vZGUgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTm9kZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIGFrYSB0cmFuc2xhdGlvbi5cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRpb24gcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlLiBSZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyByb290IHNjZW5lLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgd29ybGRUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuXHJcbiAgICAgKiBDb21wb3NpdGVkIHdpdGggcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBzY2FsZS5cclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvY2FsVHJhbnNmb3JtOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIGxvY2FsIHRyYW5zZm9ybSBpcyB1cGRhdGUgZnJvbSBTUlQoc2NhbGUsIHJvdGF0aW9uLCB0cmFuc2xhdGlvbiwgd2hpY2ggaXMgcG9zaXRpb24gaGVyZSkgZWFjaCBmcmFtZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcmVudCBvZiBjdXJyZW50IHNjZW5lIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5Ob2RlfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3BhcmVudDogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJvb3Qgc2NlbmUgbW91bnRlZC4gTnVsbCBpZiBpdCBpcyBhIGlzb2xhdGVkIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5TY2VuZX1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9zY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaW5JdGVyYXRpbmc6IGZhbHNlLFxyXG5cclxuICAgIC8vIERlcHRoIGZvciB0cmFuc3BhcmVudCBsaXN0IHNvcnRpbmdcclxuICAgIF9fZGVwdGg6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICh0aGlzLnR5cGUgfHwgJ05PREUnKSArICdfJyArIChuYW1lSWQrKyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucm90YXRpb24pIHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zY2FsZSkge1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcblxyXG59LFxyXG4vKipAbGVuZHMgY2xheS5Ob2RlLnByb3RvdHlwZS4gKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBub2RlIGFuZCBpdHMgY2hpbHJlbiBpbnZpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGludmlzaWJsZTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBOb2RlIGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYSByZW5kZXJhYmxlIHNjZW5lIG5vZGUsIGxpa2UgTWVzaCBhbmQgUGFydGljbGVTeXN0ZW1cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHNldE5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlUmVwb3NpdG9yeSA9IHNjZW5lLl9ub2RlUmVwb3NpdG9yeTtcclxuICAgICAgICAgICAgZGVsZXRlIG5vZGVSZXBvc2l0b3J5W3RoaXMubmFtZV07XHJcbiAgICAgICAgICAgIG5vZGVSZXBvc2l0b3J5W25hbWVdID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBjaGlsZCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsUGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFBhcmVudC5yZW1vdmUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChub2RlKTtcclxuXHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lICYmIHNjZW5lICE9PSBub2RlLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fYWRkU2VsZlRvU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXJrIGNoaWxkcmVuIG5lZWRzIHVwZGF0ZSB0cmFuc2Zvcm1cclxuICAgICAgICAvLyBJbiBjYXNlIGNoaWxkIGFyZSByZW1vdmUgYW5kIGFkZGVkIGFnYWluIGFmdGVyIHBhcmVudCBtb3ZlZFxyXG4gICAgICAgIG5vZGUuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2hpbGQgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpZHggPSBjaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICBub2RlLnRyYXZlcnNlKHRoaXMuX3JlbW92ZVNlbGZGcm9tU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWxsIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0uX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0udHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBzY2VuZSBtb3VudGVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBnZXRTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyZW50IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVTZWxmRnJvbVNjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lLnJlbW92ZUZyb21TY2VuZShkZXNjZW5kYW50KTtcclxuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRTZWxmVG9TY2VuZTogZnVuY3Rpb24gKGRlc2NlbmRhbnQpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZS5hZGRUb1NjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGlzQW5jZXN0b3I6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUuX3BhcmVudDtcclxuICAgICAgICB3aGlsZShwYXJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBuZXcgY3JlYXRlZCBhcnJheSBvZiBhbGwgY2hpbGRyZW4gbm9kZXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZVtdfVxyXG4gICAgICovXHJcbiAgICBjaGlsZHJlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5zbGljZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjaGlsZCBzY2VuZSBub2RlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjaGlsZEF0OiBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2lkeF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IGNoaWxkIHdpdGggdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgZGVzY2VuZGFudCBoYXZlIHRoZSBnaXZlbiBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBnZXREZXNjZW5kYW50QnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gY2hpbGQuZ2V0RGVzY2VuZGFudEJ5TmFtZShuYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IGRlc2NlbmRhbnQgbm9kZSBieSBwYXRoXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBub2RlLnF1ZXJ5Tm9kZSgncm9vdC9wYXJlbnQvY2hpbGQnKTtcclxuICAgICAqL1xyXG4gICAgcXVlcnlOb2RlOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmICghcGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gTmFtZSBoYXZlIHNsYXNoID9cclxuICAgICAgICB2YXIgcGF0aEFyciA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGF0aEFycltpXTtcclxuICAgICAgICAgICAgLy8gU2tpcCBlbXB0eVxyXG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjdXJyZW50Ll9jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bal07XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBxdWVyeSBwYXRoLCByZWxhdGl2ZSB0byByb290Tm9kZShkZWZhdWx0IGlzIHNjZW5lKVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtyb290Tm9kZV1cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0UGF0aDogZnVuY3Rpb24gKHJvb3ROb2RlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcvJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcGFyZW50O1xyXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5uYW1lO1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50Ll9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcGF0aCA9IGN1cnJlbnQubmFtZSArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Ll9wYXJlbnQgPT0gcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudC5fcGFyZW50ICYmIHJvb3ROb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXB0aCBmaXJzdCB0cmF2ZXJzZSBhbGwgaXRzIGRlc2NlbmRhbnQgc2NlbmUgbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRG9uJ3QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIHRyYXZlcnNlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIHRyYXZlcnNlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBfY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgX2NoaWxkcmVuW2ldLnRyYXZlcnNlKGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgYWxsIGNoaWxkcmVuIG5vZGVzLlxyXG4gICAgICpcclxuICAgICAqICoqV0FSTioqIERPTidUIGRvIGBhZGRgLCBgcmVtb3ZlYCBvcGVyYXRpb24gaW4gdGhlIGNhbGxiYWNrIGR1cmluZyBpdGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIGVhY2hDaGlsZDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBfY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgY2hpbGQsIGkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGxvY2FsIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIGxvY2FsIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChrZWVwU2NhbGUpIHtcclxuICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICB0aGlzLmxvY2FsVHJhbnNmb3JtLmRlY29tcG9zZU1hdHJpeChzY2FsZSwgdGhpcy5yb3RhdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB3b3JsZCB0cmFuc2Zvcm0gYW5kIGRlY29tcG9zZSB0byBTUlRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0V29ybGRUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSwgbWF0cml4LmFycmF5KTtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIHRoZSB3b3JsZCB0cmFuc2Zvcm0gdG8gU1JUXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlV29ybGRUcmFuc2Zvcm06IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0bXAgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICAvLyBBc3N1bWUgd29ybGQgdHJhbnNmb3JtIGlzIHVwZGF0ZWRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQodG1wLCB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsb2NhbFRyYW5zZm9ybS5hcnJheSwgdG1wLCB3b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobG9jYWxUcmFuc2Zvcm0uYXJyYXksIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0cmFuc2Zvcm1OZWVkc1VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnJvdGF0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnNjYWxlLl9kaXJ0eTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbG9jYWwgdHJhbnNmb3JtIGZyb20gU1JUXHJcbiAgICAgKiBOb3RpY2UgdGhhdCBsb2NhbCB0cmFuc2Zvcm0gd2lsbCBub3QgYmUgdXBkYXRlZCBpZiBfZGlydHkgbWFyayBvZiBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlIGlzIGFsbCBmYWxzZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcclxuICAgICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBvcmRlciwgc2NhbGUtPnJvdGF0aW9uLT5wb3NpdGlvblxyXG4gICAgICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG0sIHJvdGF0aW9uLmFycmF5LCBwb3NpdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIHNjYWxlLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHJvdGF0aW9uLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzY2FsZS5fZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHdvcmxkIHRyYW5zZm9ybSwgYXNzdW1lIGl0cyBwYXJlbnQgd29ybGQgdHJhbnNmb3JtIGhhdmUgYmVlbiB1cGRhdGVkXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShcclxuICAgICAgICAgICAgICAgIHdvcmxkVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtLmFycmF5LFxyXG4gICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weSh3b3JsZFRyYW5zZm9ybSwgbG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtIGJlZm9yZSB3aG9sZSBzY2VuZSBpcyB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZpbmQgdGhlIHJvb3Qgbm9kZSB3aGljaCB0cmFuc2Zvcm0gbmVlZHMgdXBkYXRlO1xyXG4gICAgICAgIHZhciByb290Tm9kZUlzRGlydHkgPSB0aGlzO1xyXG4gICAgICAgIHdoaWxlIChyb290Tm9kZUlzRGlydHkgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpXHJcbiAgICAgICAgICAgICYmIHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvb3ROb2RlSXNEaXJ0eSA9IHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdE5vZGVJc0RpcnR5LnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gYW5kIHdvcmxkIHRyYW5zZm9ybSByZWN1cnNpdmVseVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZVVwZGF0ZVdvcmxkXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlVXBkYXRlV29ybGQpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlTG9jYWxUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIGlzIG1hbnVhbGx5IHNldHRlZFxyXG4gICAgICAgICAgICBmb3JjZVVwZGF0ZVdvcmxkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZVdvcmxkIHx8IHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duKCk7XHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGUoZm9yY2VVcGRhdGVXb3JsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBib3VuZGluZyBib3ggb2Ygbm9kZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtmaWx0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgLy8gVE9ETyBTa2lubmluZ1xyXG4gICAgZ2V0Qm91bmRpbmdCb3g6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEZpbHRlciAoZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFlbC5pbnZpc2libGUgJiYgZWwuZ2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXBCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBpbnZXb3JsZFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBvdXQgfHwgbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlciB8fCBkZWZhdWx0RmlsdGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQoaW52V29ybGRUcmFuc2Zvcm0sIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmlkZW50aXR5KGludldvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShmdW5jdGlvbiAobWVzaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkgJiYgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guY29weShtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHRtcE1hdDQsIGludldvcmxkVHJhbnNmb3JtLCBtZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC51bmlvbih0bXBCQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcywgZGVmYXVsdEZpbHRlcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHdvcmxkIHBvc2l0aW9uLCBleHRyYWN0ZWQgZnJvbSB3b3JsZCB0cmFuc2Zvcm1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZ2V0V29ybGRQb3NpdGlvbjogZnVuY3Rpb24gKG91dCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICAgICAgYXJyWzBdID0gbVsxMl07XHJcbiAgICAgICAgICAgIGFyclsxXSA9IG1bMTNdO1xyXG4gICAgICAgICAgICBhcnJbMl0gPSBtWzE0XTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhtWzEyXSwgbVsxM10sIG1bMTRdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbm9kZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbm9kZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCk7XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBub2RlLnNldE5hbWUodGhpcy5uYW1lKTtcclxuICAgICAgICBub2RlLnBvc2l0aW9uLmNvcHkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgbm9kZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIG5vZGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBub2RlLmFkZChjaGlsZHJlbltpXS5jbG9uZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSB0aGUgbm9kZSBhcm91bmQgYSBheGlzIGJ5IGFuZ2xlIGRlZ3JlZXMsIGF4aXMgcGFzc2VzIHRocm91Z2ggcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludCBDZW50ZXIgcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBheGlzICBDZW50ZXIgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9ICAgICAgIGFuZ2xlIFJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAc2VlIGh0dHA6Ly9kb2NzLnVuaXR5M2QuY29tL0RvY3VtZW50YXRpb24vU2NyaXB0UmVmZXJlbmNlL1RyYW5zZm9ybS5Sb3RhdGVBcm91bmQuaHRtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIFJUTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIHBlcmZvcm1hbmNlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCwgYXhpcywgYW5nbGUpIHtcclxuXHJcbiAgICAgICAgICAgIHYuY29weSh0aGlzLnBvc2l0aW9uKS5zdWJ0cmFjdChwb2ludCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5pZGVudGl0eSgpO1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgbm9kZVxyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUocG9pbnQpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5yb3RhdGUoYW5nbGUsIGF4aXMpO1xyXG5cclxuICAgICAgICAgICAgUlRNYXRyaXguZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odGhpcy5yb3RhdGlvbiwgdik7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KFJUTWF0cml4KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uc2NhbGUodGhpcy5zY2FsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFt1cF1cclxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5vcGVuZ2wub3JnL3Nkay9kb2NzL21hbjIveGh0bWwvZ2x1TG9va0F0LnhtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVwKSB7XHJcbiAgICAgICAgICAgIG0ubG9va0F0KHRoaXMucG9zaXRpb24sIHRhcmdldCwgdXAgfHwgdGhpcy5sb2NhbFRyYW5zZm9ybS55KS5pbnZlcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbFRyYW5zZm9ybShtKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJ2ZWMzIGNhbGNBbWJpZW50U0hMaWdodChpbnQgaWR4LCB2ZWMzIE4pIHtcXG4gaW50IG9mZnNldCA9IDkgKiBpZHg7XFxuIHJldHVybiBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1swXVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzFdICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMl0gKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1szXSAqIE4uelxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzRdICogTi54ICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNV0gKiBOLnogKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s2XSAqIE4ueSAqIE4ueFxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzddICogKDMuMCAqIE4ueiAqIE4ueiAtIDEuMClcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s4XSAqIChOLnggKiBOLnggLSBOLnkgKiBOLnkpO1xcbn1cIjtcclxuIiwiaW1wb3J0IGNhbGNBbWJpZW50U0hMaWdodEVzc2wgZnJvbSAnLi9jYWxjQW1iaWVudFNITGlnaHQuZ2xzbC5qcyc7XHJcblxyXG52YXIgdW5pZm9ybVZlYzNQcmVmaXggPSAndW5pZm9ybSB2ZWMzICc7XHJcbnZhciB1bmlmb3JtRmxvYXRQcmVmaXggPSAndW5pZm9ybSBmbG9hdCAnO1xyXG52YXIgZXhwb3J0SGVhZGVyUHJlZml4ID0gJ0BleHBvcnQgY2xheS5oZWFkZXIuJztcclxudmFyIGV4cG9ydEVuZCA9ICdAZW5kJztcclxudmFyIHVuY29uZmlndXJhYmxlID0gJzp1bmNvbmZpZ3VyYWJsZTsnO1xyXG5leHBvcnQgZGVmYXVsdCBbXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnZGlyZWN0aW9uYWxfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0Q29sb3JbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRMaWdodENvbG9yW0FNQklFTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X3NoX2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29sb3JbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1tBTUJJRU5UX1NIX0xJR0hUX0NPVU5UICogOV0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBjYWxjQW1iaWVudFNITGlnaHRFc3NsLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2N1YmVtYXBfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyQ3ViZSBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3BvaW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRQb3NpdGlvbltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAncG9pbnRMaWdodFJhbmdlW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRDb2xvcltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3Nwb3RfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0UG9zaXRpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHREaXJlY3Rpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0UmFuZ2VbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodEZhbGxvZmZGYWN0b3JbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRDb2xvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZFxyXG5dLmpvaW4oJ1xcbicpO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcbmltcG9ydCBsaWdodFNoYWRlciBmcm9tICcuL3NoYWRlci9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuU2hhZGVyWydpbXBvcnQnXShsaWdodFNoYWRlcik7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTGlnaHRcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgTGlnaHQgPSBOb2RlLmV4dGVuZChmdW5jdGlvbigpe1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5MaWdodCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IFJHQiBjb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGludGVuc2l0eTogMS4wLFxyXG5cclxuICAgICAgICAvLyBDb25maWcgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsaWdodCBjYXN0IHNoYWRvd1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNoYWRvdyBtYXAgc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hhZG93UmVzb2x1dGlvbjogNTEyLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBncm91cCwgc2hhZGVyIHdpdGggc2FtZSBgbGlnaHRHcm91cGAgd2lsbCBiZSBhZmZlY3RlZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogT25seSB1c2VmdWwgaW4gZm9yd2FyZCByZW5kZXJpbmdcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdyb3VwOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTGlnaHQucHJvdG90eXBlLiAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIExpZ2h0IHR5cGVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodCNcclxuICAgICAqL1xyXG4gICAgdHlwZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkxpZ2h0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTGlnaHQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBOb2RlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LmNvbG9yID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5jb2xvcik7XHJcbiAgICAgICAgbGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XHJcbiAgICAgICAgbGlnaHQuY2FzdFNoYWRvdyA9IHRoaXMuY2FzdFNoYWRvdztcclxuICAgICAgICBsaWdodC5zaGFkb3dSZXNvbHV0aW9uID0gdGhpcy5zaGFkb3dSZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlnaHQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzQgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjNCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlBsYW5lXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbm9ybWFsXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Rpc3RhbmNlXVxyXG4gKi9cclxudmFyIFBsYW5lID0gZnVuY3Rpb24obm9ybWFsLCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWwgb2YgdGhlIHBsYW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbCB8fCBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0YW50IG9mIHRoZSBwbGFuZSBlcXVhdGlvbiwgdXNlZCBhcyBkaXN0YW5jZSB0byB0aGUgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2UgfHwgMDtcclxufTtcclxuXHJcblBsYW5lLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUGxhbmUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gcG9pbnQgdG8gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogZnVuY3Rpb24ocG9pbnQpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kb3QocG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5KSAtIHRoaXMuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBwcm9qZWN0aW9uIHBvaW50IG9uIHRoZSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBwb2ludFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcHJvamVjdFBvaW50OiBmdW5jdGlvbihwb2ludCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGQgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChwb2ludCk7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHBvaW50LmFycmF5LCB0aGlzLm5vcm1hbC5hcnJheSwgLWQpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHRoZSBwbGFuZSdzIG5vcm1hbCBhbmQgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZMZW4gPSAxIC8gdmVjMy5sZW4odGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5ub3JtYWwuYXJyYXksIGludkxlbik7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSAqPSBpbnZMZW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIHBsYW5lIGludGVyc2VjdCBhIGZydXN0dW1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuRnJ1c3R1bX0gRnJ1c3R1bVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0RnJ1c3R1bTogZnVuY3Rpb24oZnJ1c3R1bSkge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCBjb29yZHMgb2YgZnJ1c3R1bSBpcyBvbiBwbGFuZSBhbGwgdW5kZXIgcGxhbmVcclxuICAgICAgICB2YXIgY29vcmRzID0gZnJ1c3R1bS52ZXJ0aWNlcztcclxuICAgICAgICB2YXIgbm9ybWFsID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIG9uUGxhbmUgPSB2ZWMzLmRvdChjb29yZHNbMF0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgodmVjMy5kb3QoY29vcmRzW2ldLmFycmF5LCBub3JtYWwpID4gdGhpcy5kaXN0YW5jZSkgIT0gb25QbGFuZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiBwbGFuZSBhbmQgYSBnaXZlbiBsaW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBzdGFydCBzdGFydCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gZW5kIGVuZCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0TGluZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciByZCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgZDAgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChzdGFydCk7XHJcbiAgICAgICAgICAgIHZhciBkMSA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KGVuZCk7XHJcbiAgICAgICAgICAgIGlmICgoZDAgPiAwICYmIGQxID4gMCkgfHwgKGQwIDwgMCAmJiBkMSA8IDApKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBwbiA9IHRoaXMubm9ybWFsLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHZhciBybyA9IHN0YXJ0LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBkaXJlY3Rpb25cclxuICAgICAgICAgICAgdmVjMy5zdWIocmQsIGVuZC5hcnJheSwgc3RhcnQuYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShyZCwgcmQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgICAgICAvLyByYXkgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lXHJcbiAgICAgICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgbm9ybWFsdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwb2ludHY0ID0gdmVjNC5jcmVhdGUoKTtcclxuICAgICAgICBwb2ludHY0WzNdID0gMTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obTQpIHtcclxuICAgICAgICAgICAgbTQgPSBtNC5hcnJheTtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvaW50IG9uIHBsYW5lXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXksIHRoaXMuZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQocG9pbnR2NCwgcG9pbnR2NCwgbTQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gdmVjMy5kb3QocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcGxhbmUgbm9ybWFsXHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2UsIG00KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZSwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIG5vcm1hbHY0WzNdID0gMDtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KG5vcm1hbHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChub3JtYWx2NCwgbm9ybWFsdjQsIGludmVyc2VUcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIG5vcm1hbHY0KTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBhbm90aGVyIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKHBsYW5lKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHBsYW5lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlBsYW5lfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgcGxhbmUuY29weSh0aGlzKTtcclxuICAgICAgICByZXR1cm4gcGxhbmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi9QbGFuZSc7XHJcblxyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxudmFyIHZlYzNUcmFuZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbnZhciBtYXRoTWluID0gTWF0aC5taW47XHJcbnZhciBtYXRoTWF4ID0gTWF0aC5tYXg7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuRnJ1c3R1bVxyXG4gKi9cclxudmFyIEZydXN0dW0gPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHBsYW5lcyB0byBlbmNsb3NlIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5QbGFuZVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBsYW5lcyA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5wbGFuZXMucHVzaChuZXcgUGxhbmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb3VuZGluZyBib3ggb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHZlcnRpY2VzIG9mIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICB0aGlzLnZlcnRpY2VzW2ldID0gdmVjMy5mcm9tVmFsdWVzKDAsIDAsIDApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuRnJ1c3R1bS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMjA1MzEyMzEwMDUvaHR0cDovL2NyYXp5am9rZS5mcmVlLmZyL2RvYy8zRC9wbGFuZSUyMGV4dHJhY3Rpb24ucGRmXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcnVzdHVtIGZyb20gYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0RnJvbVByb2plY3Rpb246IGZ1bmN0aW9uKHByb2plY3Rpb25NYXRyaXgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzO1xyXG4gICAgICAgIHZhciBtID0gcHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICB2YXIgbTAgPSBtWzBdLCBtMSA9IG1bMV0sIG0yID0gbVsyXSwgbTMgPSBtWzNdO1xyXG4gICAgICAgIHZhciBtNCA9IG1bNF0sIG01ID0gbVs1XSwgbTYgPSBtWzZdLCBtNyA9IG1bN107XHJcbiAgICAgICAgdmFyIG04ID0gbVs4XSwgbTkgPSBtWzldLCBtMTAgPSBtWzEwXSwgbTExID0gbVsxMV07XHJcbiAgICAgICAgdmFyIG0xMiA9IG1bMTJdLCBtMTMgPSBtWzEzXSwgbTE0ID0gbVsxNF0sIG0xNSA9IG1bMTVdO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgcGxhbmVzXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMF0ubm9ybWFsLmFycmF5LCBtMyAtIG0wLCBtNyAtIG00LCBtMTEgLSBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzBdLmRpc3RhbmNlID0gLShtMTUgLSBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1swXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMV0ubm9ybWFsLmFycmF5LCBtMyArIG0wLCBtNyArIG00LCBtMTEgKyBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzFdLmRpc3RhbmNlID0gLShtMTUgKyBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMl0ubm9ybWFsLmFycmF5LCBtMyArIG0xLCBtNyArIG01LCBtMTEgKyBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzJdLmRpc3RhbmNlID0gLShtMTUgKyBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1syXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbM10ubm9ybWFsLmFycmF5LCBtMyAtIG0xLCBtNyAtIG01LCBtMTEgLSBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzNdLmRpc3RhbmNlID0gLShtMTUgLSBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1szXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNF0ubm9ybWFsLmFycmF5LCBtMyAtIG0yLCBtNyAtIG02LCBtMTEgLSBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s0XS5kaXN0YW5jZSA9IC0obTE1IC0gbTE0KTtcclxuICAgICAgICBwbGFuZXNbNF0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzVdLm5vcm1hbC5hcnJheSwgbTMgKyBtMiwgbTcgKyBtNiwgbTExICsgbTEwKTtcclxuICAgICAgICBwbGFuZXNbNV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xNCk7XHJcbiAgICAgICAgcGxhbmVzWzVdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmIChtMTUgPT09IDApICB7XHJcbiAgICAgICAgICAgIHZhciBhc3BlY3QgPSBtNSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgek5lYXIgPSAtbTE0IC8gKG0xMCAtIDEpO1xyXG4gICAgICAgICAgICB2YXIgekZhciA9IC1tMTQgLyAobTEwICsgMSk7XHJcbiAgICAgICAgICAgIHZhciBmYXJZID0gLXpGYXIgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXJZID0gLXpOZWFyIC8gbTU7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldCgtZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KGZhclkgKiBhc3BlY3QsIGZhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgLy8gdXBkYXRlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIC1mYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBmYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzRdLCAtbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCAtbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBPcnRob2dyYXBoaWMgcHJvamVjdGlvblxyXG4gICAgICAgICAgICB2YXIgbGVmdCA9ICgtMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gKDEgLSBtMTIpIC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB0b3AgPSAoMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIGJvdHRvbSA9ICgtMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXIgPSAoLTEgLSBtMTQpIC8gbTEwO1xyXG4gICAgICAgICAgICB2YXIgZmFyID0gKDEgLSBtMTQpIC8gbTEwO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoTWF0aC5taW4obGVmdCwgcmlnaHQpLCBNYXRoLm1pbihib3R0b20sIHRvcCksIE1hdGgubWluKGZhciwgbmVhcikpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KE1hdGgubWF4KHJpZ2h0LCBsZWZ0KSwgTWF0aC5tYXgodG9wLCBib3R0b20pLCBNYXRoLm1heChuZWFyLCBmYXIpKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBib3VuZGluZ0JveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBib3VuZGluZ0JveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgbWF4WzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCBtaW5bMF0sIG1heFsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IGFuZCBzZXQgdG8gdGhlIGdpdmVuIGJvdW5kaW5nIGJveFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIGdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3g6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcFZlYzMgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oYmJveCwgbWF0cml4KSB7XHJcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgbTQgPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJib3gubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlcnRpY2VzWzBdO1xyXG4gICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWluQXJyLCB0bXBWZWMzKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB0bXBWZWMzKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMF0gPSBtYXRoTWluKHRtcFZlYzNbMF0sIG1pbkFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMV0gPSBtYXRoTWluKHRtcFZlYzNbMV0sIG1pbkFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMl0gPSBtYXRoTWluKHRtcFZlYzNbMl0sIG1pbkFyclsyXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzBdID0gbWF0aE1heCh0bXBWZWMzWzBdLCBtYXhBcnJbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzFdID0gbWF0aE1heCh0bXBWZWMzWzFdLCBtYXhBcnJbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzJdID0gbWF0aE1heCh0bXBWZWMzWzJdLCBtYXhBcnJbMl0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYmJveDtcclxuICAgICAgICB9O1xyXG4gICAgfSkgKClcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgRnJ1c3R1bTtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgRVBTSUxPTiA9IDFlLTU7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJheVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW29yaWdpbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtkaXJlY3Rpb25dXHJcbiAqL1xyXG52YXIgUmF5ID0gZnVuY3Rpb24gKG9yaWdpbiwgZGlyZWN0aW9uKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IG5ldyBWZWN0b3IzKCk7XHJcbn07XHJcblxyXG5SYXkucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBSYXksXHJcblxyXG4gICAgLy8gaHR0cDovL3d3dy5zaWdncmFwaC5vcmcvZWR1Y2F0aW9uL21hdGVyaWFscy9IeXBlckdyYXBoL3JheXRyYWNlL3JheXBsYW5lX2ludGVyc2VjdGlvbi5odG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYSBnaXZlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lLCBvdXQpIHtcclxuICAgICAgICB2YXIgcG4gPSBwbGFuZS5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIGQgPSBwbGFuZS5kaXN0YW5jZTtcclxuICAgICAgICB2YXIgcm8gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgcmQgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICBpZiAoZGl2aWRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHQgPSAodmVjMy5kb3QocG4sIHJvKSAtIGQpIC8gZGl2aWRlcjtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaXJyb3IgdGhlIHJheSBhZ2FpbnN0IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICovXHJcbiAgICBtaXJyb3JBZ2FpbnN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSkge1xyXG4gICAgICAgIC8vIERpc3RhbmNlIHRvIHBsYW5lXHJcbiAgICAgICAgdmFyIGQgPSB2ZWMzLmRvdChwbGFuZS5ub3JtYWwuYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMuZGlyZWN0aW9uLmFycmF5LCB0aGlzLmRpcmVjdGlvbi5hcnJheSwgcGxhbmUubm9ybWFsLmFycmF5LCAtZCAqIDIpO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCkge1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBwb2ludCwgdGhpcy5vcmlnaW4uYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHByb2plY3Rpb24gcG9pbnQgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBiID0gdmVjMy5kb3QodiwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICBpZiAoYiA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMub3JpZ2luLmFycmF5LCBwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGMyID0gdmVjMy5sZW5TcXVhcmVkKHYpO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIHByb2plY3Rpb24gcG9pbnRcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChjMiAtIGIgKiBiKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiByYXkgYW5kIHNwaGVyZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmFkaXVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RTcGhlcmU6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2VudGVyLCByYWRpdXMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICAgICAgY2VudGVyID0gY2VudGVyLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBjZW50ZXIsIG9yaWdpbik7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCBkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLnNxdWFyZWRMZW5ndGgodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICB2YXIgZDIgPSBjMiAtIGIgKiBiO1xyXG5cclxuICAgICAgICAgICAgdmFyIHIyID0gcmFkaXVzICogcmFkaXVzO1xyXG4gICAgICAgICAgICAvLyBObyBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgaWYgKGQyID4gcjIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGEgPSBNYXRoLnNxcnQocjIgLSBkMik7XHJcbiAgICAgICAgICAgIC8vIEZpcnN0IGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDAgPSBiIC0gYTtcclxuICAgICAgICAgICAgLy8gU2Vjb25kIGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDEgPSBiICsgYTtcclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0MCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0MSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNjcmF0Y2hhcGl4ZWwuY29tL2xlc3NvbnMvM2QtYmFzaWMtbGVzc29ucy9sZXNzb24tNy1pbnRlcnNlY3Rpbmctc2ltcGxlLXNoYXBlcy9yYXktYm94LWludGVyc2VjdGlvbi9cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gsIG91dCkge1xyXG4gICAgICAgIHZhciBkaXIgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1pbiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGludmRpcnggPSAxIC8gZGlyWzBdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ5ID0gMSAvIGRpclsxXTtcclxuICAgICAgICB2YXIgaW52ZGlyeiA9IDEgLyBkaXJbMl07XHJcblxyXG4gICAgICAgIHZhciB0bWluLCB0bWF4LCB0eW1pbiwgdHltYXgsIHR6bWluLCB0em1heDtcclxuICAgICAgICBpZiAoaW52ZGlyeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bWF4ID0gKG1pblswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgICAgICB0bWluID0gKG1heFswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW52ZGlyeSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1heCA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1pbiA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR5bWF4KSB8fCAodHltaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eW1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHltaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eW1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHltYXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW52ZGlyeiA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1heCA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1pbiA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR6bWF4KSB8fCAodHptaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0em1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHptaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0em1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHptYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0bWF4IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ID0gdG1pbiA+PSAwID8gdG1pbiA6IHRtYXg7XHJcblxyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NJUMzJUI2bGxlciVFMiU4MCU5M1RydW1ib3JlX2ludGVyc2VjdGlvbl9hbGdvcml0aG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgdGhyZWUgdHJpYW5nbGUgdmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGNcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgIHNpbmdsZVNpZGVkLCBDVyB0cmlhbmdsZSB3aWxsIGJlIGlnbm9yZWRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtiYXJ5Y2VudGVyaWNdIGJhcnljZW50cmljIGNvb3Jkc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RUcmlhbmdsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIGVCQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIGVDQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIEFPID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgdkNyb3NzID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBzaW5nbGVTaWRlZCwgb3V0LCBiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIGEgPSBhLmFycmF5O1xyXG4gICAgICAgICAgICBiID0gYi5hcnJheTtcclxuICAgICAgICAgICAgYyA9IGMuYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQkEsIGIsIGEpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQ0EsIGMsIGEpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVDQSwgZGlyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB2ZWMzLmRvdChlQkEsIHZDcm9zcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZXQgPiAtRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OICYmIGRldCA8IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5zdWIoQU8sIG9yaWdpbiwgYSk7XHJcbiAgICAgICAgICAgIHZhciB1ID0gdmVjMy5kb3QodkNyb3NzLCBBTykgLyBkZXQ7XHJcbiAgICAgICAgICAgIGlmICh1IDwgMCB8fCB1ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIEFPKTtcclxuICAgICAgICAgICAgdmFyIHYgPSB2ZWMzLmRvdChkaXIsIHZDcm9zcykgLyBkZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodiA8IDAgfHwgdiA+IDEgfHwgKHUgKyB2ID4gMSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUJBLCBlQ0EpO1xyXG4gICAgICAgICAgICB2YXIgdCA9IC12ZWMzLmRvdChBTywgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuc2V0KGJhcnljZW50ZXJpYywgKDEgLSB1IC0gdiksIHUsIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIHJheVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBWZWN0b3IzLmFkZCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIHRoaXMub3JpZ2luKTtcclxuICAgICAgICBWZWN0b3IzLnRyYW5zZm9ybU1hdDQodGhpcy5vcmlnaW4sIHRoaXMub3JpZ2luLCBtYXRyaXgpO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIG1hdHJpeCk7XHJcblxyXG4gICAgICAgIFZlY3RvcjMuc3ViKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMubm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIHJheVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gcmF5XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChyYXkpIHtcclxuICAgICAgICBWZWN0b3IzLmNvcHkodGhpcy5vcmlnaW4sIHJheS5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLmRpcmVjdGlvbiwgcmF5LmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG4gICAgICAgIHJheS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiByYXk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5cclxuaW1wb3J0IHZlYzQgZnJvbSAnLi9nbG1hdHJpeC92ZWM0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuQ2FtZXJhXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIENhbWVyYSA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuQ2FtZXJhIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnZlcnNlIG9mIGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW52UHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmlldyBtYXRyaXgsIGVxdWFsIHRvIGludmVyc2Ugb2YgY2FtZXJhJ3Mgd29ybGQgbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3TWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZnJ1c3R1bSBpbiB2aWV3IHNwYWNlXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuRnJ1c3R1bX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcnVzdHVtOiBuZXcgRnJ1c3R1bSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LkNhbWVyYS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgTm9kZS5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgZm9yY2UpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMudmlld01hdHJpeCwgdGhpcy53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHRoaXMucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSB2aWV3IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3TWF0cml4OiBmdW5jdGlvbiAodmlld01hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnZpZXdNYXRyaXgsIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMud29ybGRUcmFuc2Zvcm0sIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0UHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKHByb2plY3Rpb25NYXRyaXgpIHtcclxuICAgICAgICBNYXRyaXg0LmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4LCBwcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBNYXRyaXg0LmludmVydCh0aGlzLmludlByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHByb2plY3Rpb24gbWF0cml4LCBjYWxsZWQgYWZ0ZXIgdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FzdCBhIHBpY2tpbmcgcmF5IGZyb20gY2FtZXJhIG5lYXIgcGxhbmUgdG8gZmFyIHBsYW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBuZGNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SYXl9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2FzdFJheTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmRjLCBvdXQpIHtcclxuICAgICAgICAgICAgdmFyIHJheSA9IG91dCAhPT0gdW5kZWZpbmVkID8gb3V0IDogbmV3IFJheSgpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IG5kYy5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIHkgPSBuZGMuYXJyYXlbMV07XHJcbiAgICAgICAgICAgIHZlYzQuc2V0KHY0LCB4LCB5LCAtMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHJheS5vcmlnaW4uYXJyYXksIHY0LCAxIC8gdjRbM10pO1xyXG5cclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIDEsIDEpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLmludlByb2plY3Rpb25NYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZSh2NCwgdjQsIDEgLyB2NFszXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHJheS5kaXJlY3Rpb24uYXJyYXksIHY0LCByYXkub3JpZ2luLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJheS5kaXJlY3Rpb24uYXJyYXksIHJheS5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICByYXkuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJheS5vcmlnaW4uX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByYXk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkNhbWVyYX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkNhbWVyYS5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhbWVyYTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IExpZ2h0IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgSURFTlRJVFkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG52YXIgV09STERWSUVXID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJzKSB7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICB2YXIgbGlnaHRUeXBlcyA9IE9iamVjdC5rZXlzKGxpZ2h0TnVtYmVycyk7XHJcbiAgICBsaWdodFR5cGVzLnNvcnQoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRUeXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBsaWdodFR5cGUgPSBsaWdodFR5cGVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKGxpZ2h0VHlwZSArICcgJyArIGxpZ2h0TnVtYmVyc1tsaWdodFR5cGVdKTtcclxuICAgIH1cclxuICAgIHZhciBrZXkgPSBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcblxyXG4gICAgaWYgKHByb2dyYW1LZXlDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2dyYW1LZXlDYWNoZVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgcHJvZ3JhbUtleUNhY2hlW2tleV0gPSBpZDtcclxuICAgIHJldHVybiBpZDtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVuZGVyTGlzdCgpIHtcclxuXHJcbiAgICB0aGlzLm9wYXF1ZSA9IFtdO1xyXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX29wYXF1ZUNvdW50ID0gMDtcclxuICAgIHRoaXMuX3RyYW5zcGFyZW50Q291bnQgPSAwO1xyXG59XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5zdGFydENvdW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob2JqZWN0LCBpc1RyYW5zcGFyZW50KSB7XHJcbiAgICBpZiAoaXNUcmFuc3BhcmVudCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRbdGhpcy5fdHJhbnNwYXJlbnRDb3VudCsrXSA9IG9iamVjdDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3BhcXVlW3RoaXMuX29wYXF1ZUNvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuUmVuZGVyTGlzdC5wcm90b3R5cGUuZW5kQ291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50Lmxlbmd0aCA9IHRoaXMuX3RyYW5zcGFyZW50Q291bnQ7XHJcbiAgICB0aGlzLm9wYXF1ZS5sZW5ndGggPSB0aGlzLl9vcGFxdWVDb3VudDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LlNjZW5lLlJlbmRlckxpc3RcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gb3BhcXVlXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPGNsYXkuUmVuZGVyYWJsZT59IHRyYW5zcGFyZW50XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNjZW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIFNjZW5lID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TY2VuZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdsb2JhbCBtYXRlcmlhbCBvZiBzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICBsaWdodHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2VuZSBib3VuZGluZyBib3ggaW4gdmlldyBzcGFjZS5cclxuICAgICAgICAgKiBVc2VkIHdoZW4gY2FtZXJhIG5lZWRzIHRvIGFkdWpzdCB0aGUgbmVhciBhbmQgZmFyIHBsYW5lIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgKiBzbyB0aGF0IHRoZSB2aWV3IGZydXN0dW0gY29udGFpbnMgdGhlIHZpc2libGUgb2JqZWN0cyBhcyB0aWdodGx5IGFzIHBvc3NpYmxlLlxyXG4gICAgICAgICAqIE5vdGljZTpcclxuICAgICAgICAgKiAgSXQgaXMgdXBkYXRlZCBhZnRlciByZW5kZXJpbmcgKGluIHRoZSBzdGVwIG9mIGZydXN0dW0gY3VsbGluZyBwYXNzaW5nbHkpLiBTbyBtYXkgYmUgbm90IHNvIGFjY3VyYXRlLCBidXQgc2F2ZXMgYSBsb3Qgb2YgY2FsY3VsYXRpb25cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdCb3VuZGluZ0JveExhc3RGcmFtZTogbmV3IEJvdW5kaW5nQm94KCksXHJcblxyXG4gICAgICAgIC8vIFVuaWZvcm1zIGZvciBzaGFkb3cgbWFwLlxyXG4gICAgICAgIHNoYWRvd1VuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX2NhbWVyYUxpc3Q6IFtdLFxyXG5cclxuICAgICAgICAvLyBQcm9wZXJ0aWVzIHRvIHNhdmUgdGhlIGxpZ2h0IGluZm9ybWF0aW9uIGluIHRoZSBzY2VuZVxyXG4gICAgICAgIC8vIFdpbGwgYmUgc2V0IGluIHRoZSByZW5kZXIgZnVuY3Rpb25cclxuICAgICAgICBfbGlnaHRVbmlmb3Jtczoge30sXHJcblxyXG4gICAgICAgIF9wcmV2aW91c0xpZ2h0TnVtYmVyOiB7fSxcclxuXHJcbiAgICAgICAgX2xpZ2h0TnVtYmVyOiB7XHJcbiAgICAgICAgICAgIC8vIGdyb3VwSWQ6IHtcclxuICAgICAgICAgICAgICAgIC8vIFBPSU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gRElSRUNUSU9OQUxfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBTUE9UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIEFNQklFTlRfU0hfTElHSFQ6IDBcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9saWdodFByb2dyYW1LZXlzOiB7fSxcclxuXHJcbiAgICAgICAgX25vZGVSZXBvc2l0b3J5OiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlckxpc3RzOiBuZXcgTFJVQ2FjaGUoMjApXHJcblxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fc2NlbmUgPSB0aGlzO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2NlbmUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLy8gQWRkIG5vZGUgdG8gc2NlbmVcclxuICAgIGFkZFRvU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYW1lcmEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NhbWVyYUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGb3VuZCBtdWx0aXBsZSBjYW1lcmEgaW4gb25lIHNjZW5lLiBVc2UgdGhlIGZpc3Qgb25lLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbWVyYUxpc3QucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnlbbm9kZS5uYW1lXSA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBSZW1vdmUgbm9kZSBmcm9tIHNjZW5lXHJcbiAgICByZW1vdmVGcm9tU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGlkeDtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgaWR4ID0gdGhpcy5saWdodHMuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0cy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbm9kZSBieSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge05vZGV9XHJcbiAgICAgKiBAREVQUkVDQVRFRFxyXG4gICAgICovXHJcbiAgICBnZXROb2RlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlUmVwb3NpdG9yeVtuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Z2wuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqL1xyXG4gICAgc2V0TWFpbkNhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2YoY2FtZXJhKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC51bnNoaWZ0KGNhbWVyYSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYUxpc3RbMF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpZ2h0cztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXIgPSB0aGlzLl9saWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgdmFyIGxpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ3JvdXAgPSBsaWdodC5ncm91cDtcclxuICAgICAgICAgICAgaWYgKCFsaWdodE51bWJlcltncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFVzZXIgY2FuIHVzZSBhbnkgdHlwZSBvZiBsaWdodFxyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gPSBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gfHwgMDtcclxuICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0gbGlnaHROdW1iZXI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRQcm9ncmFtS2V5c1tncm91cElkXSA9IGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJbZ3JvdXBJZF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlTGlnaHRVbmlmb3JtcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbm9kZSBhbmQgaXQncyBjaGlsZHJlbiwgaW5jbHVkaW5nIG1lc2gsIGNhbWVyYSwgbGlnaHQsIGV0Yy5cclxuICAgICAqIFVubGlrZSB1c2luZyBgTm9kZSNjbG9uZWAuIEl0IHdpbGwgY2xvbmUgc2tlbGV0b24gYW5kIHJlbWFwIHRoZSBqb2ludHMuIE1hdGVyaWFsIHdpbGwgYWxzbyBiZSBjbG9uZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmVOb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBuZXdOb2RlID0gbm9kZS5jbG9uZSgpO1xyXG4gICAgICAgIHZhciBjbG9uZWROb2Rlc01hcCA9IHt9O1xyXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTm9kZXNNYXAoc05vZGUsIHROb2RlKSB7XHJcbiAgICAgICAgICAgIGNsb25lZE5vZGVzTWFwW3NOb2RlLl9fdWlkX19dID0gdE5vZGU7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNOb2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNDaGlsZCA9IHNOb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIHZhciB0Q2hpbGQgPSB0Tm9kZS5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBidWlsZE5vZGVzTWFwKHNDaGlsZCwgdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBidWlsZE5vZGVzTWFwKG5vZGUsIG5ld05vZGUpO1xyXG5cclxuICAgICAgICBuZXdOb2RlLnRyYXZlcnNlKGZ1bmN0aW9uIChuZXdDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQuc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLnNrZWxldG9uID0gbmV3Q2hpbGQuc2tlbGV0b24uY2xvbmUoY2xvbmVkTm9kZXNNYXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQubWF0ZXJpYWwgPSBuZXdDaGlsZC5tYXRlcmlhbC5jbG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXZlcnNlIHRoZSBzY2VuZSBhbmQgYWRkIHRoZSByZW5kZXJhYmxlIG9iamVjdCB0byB0aGUgcmVuZGVyIGxpc3QuXHJcbiAgICAgKiBJdCBuZWVkcyBjYW1lcmEgZm9yIHRoZSBmcnVzdHVtIGN1bGxpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVwZGF0ZVNjZW5lQm91bmRpbmdCb3hcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgdXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIHZhciBpZCA9IGNhbWVyYS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGlkKTtcclxuICAgICAgICBpZiAoIXJlbmRlckxpc3QpIHtcclxuICAgICAgICAgICAgcmVuZGVyTGlzdCA9IG5ldyBSZW5kZXJMaXN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpc3RzLnB1dChpZCwgcmVuZGVyTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckxpc3Quc3RhcnRDb3VudCgpO1xyXG5cclxuICAgICAgICBpZiAodXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCA9IHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QodGhpcywgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpO1xyXG5cclxuICAgICAgICByZW5kZXJMaXN0LmVuZENvdW50KCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZW5kZXJMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXIgbGlzdC4gVXNlZCBhZnRlciB7QGxpbmsgY2xheS5TY2VuZSN1cGRhdGVSZW5kZXJMaXN0fVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lLlJlbmRlckxpc3R9XHJcbiAgICAgKi9cclxuICAgIGdldFJlbmRlckxpc3Q6IGZ1bmN0aW9uIChjYW1lcmEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGNhbWVyYS5fX3VpZF9fKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKHBhcmVudCwgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpIHtcclxuICAgICAgICBpZiAocGFyZW50LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gT3B0aW1pemVcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50Ll9jaGlsZHJlbltpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICB2YXIgd29ybGRNID0gY2hpbGQuaXNTa2lubmVkTWVzaCgpID8gSURFTlRJVFkgOiBjaGlsZC53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IGNoaWxkLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUoV09STERWSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94ICYmICFnZW9tZXRyeS5ib3VuZGluZ0JveCB8fCAhdGhpcy5pc0ZydXN0dW1DdWxsZWQoY2hpbGQsIGNhbWVyYSwgV09STERWSUVXKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3QuYWRkKGNoaWxkLCBjaGlsZC5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9VcGRhdGVSZW5kZXJMaXN0KGNoaWxkLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYW4gc2NlbmUgb2JqZWN0IGlzIGN1bGxlZCBieSBjYW1lcmEgZnJ1c3R1bVxyXG4gICAgICpcclxuICAgICAqIE9iamVjdCBjYW4gYmUgYSByZW5kZXJhYmxlIG9yIGEgbGlnaHRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHdvcmxkVmlld01hdCByZXByZXNlbnRlZCB3aXRoIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwcm9qZWN0aW9uTWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqL1xyXG4gICAgaXNGcnVzdHVtQ3VsbGVkOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuY3NlLmNoYWxtZXJzLnNlL351ZmZlL3ZmY19iYm94LnBkZlxyXG4gICAgICAgIHZhciBjdWxsaW5nQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgY3VsbGluZ01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgY2FtZXJhLCB3b3JsZFZpZXdNYXQpIHtcclxuICAgICAgICAgICAgLy8gQm91bmRpbmcgYm94IGNhbiBiZSBhIHByb3BlcnR5IG9mIG9iamVjdChsaWtlIGxpZ2h0KSBvciByZW5kZXJhYmxlLmdlb21ldHJ5XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdmFyIGdlb0JCb3ggPSBvYmplY3QuYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgIGlmICghZ2VvQkJveCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdC5za2VsZXRvbiAmJiBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0LnNrZWxldG9uLmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvQkJveCA9IG9iamVjdC5nZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSB3b3JsZFZpZXdNYXQ7XHJcbiAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC50cmFuc2Zvcm1Gcm9tKGdlb0JCb3gsIGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzc2luZ2x5IHVwZGF0ZSB0aGUgc2NlbmUgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGV4Y2x1ZGUgdmVyeSBsYXJnZSBtZXNoIGxpa2UgZ3JvdW5kIHBsYW5lIG9yIHRlcnJhaW4gP1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBPbmx5IHJlbmRlcmVyYWJsZSB3aGljaCBjYXN0IHNoYWRvdyA/XHJcblxyXG4gICAgICAgICAgICAvLyBGSVhNRSBib3VuZGluZ0JveCBiZWNvbWVzIG11Y2ggbGFyZ2VyIGFmdGVyIHRyYW5zZm9ybWQuXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUudW5pb24oY3VsbGluZ0JvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZ25vcmUgZnJ1c3R1bSBjdWxsaW5nIGlmIG9iamVjdCBpcyBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuZnJ1c3R1bUN1bGxpbmcpICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1bGxpbmdCb3VuZGluZ0JveC5pbnRlcnNlY3RCb3VuZGluZ0JveChjYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nTWF0cml4LmFycmF5ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5WzJdIDwgMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xpcCBpbiB0aGUgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXlbMl0gPSAtMWUtMjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LmFwcGx5UHJvamVjdGlvbihjdWxsaW5nTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWluID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXggPSBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBtYXhbMF0gPCAtMSB8fCBtaW5bMF0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzFdIDwgLTEgfHwgbWluWzFdID4gMVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG1heFsyXSA8IC0xIHx8IG1pblsyXSA+IDFcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3VwZGF0ZUxpZ2h0VW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsaWdodCBjYXN0IHNoYWRvdyBiZWZvcmUgdGhlIGxpZ2h0IG5vdCBjYXN0IHNoYWRvd1xyXG4gICAgICAgIGxpZ2h0cy5zb3J0KGxpZ2h0U29ydEZ1bmMpO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHRVbmlmb3JtcyA9IHRoaXMuX2xpZ2h0VW5pZm9ybXM7XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXAgaW4gbGlnaHRVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHRVbmlmb3Jtc1tncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0udmFsdWUubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGxpZ2h0LnVuaWZvcm1UZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdW5pZm9ybVRwbC52YWx1ZShsaWdodCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsaWdodFVuaWZvcm1zW2dyb3VwXVtzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBsdS50eXBlID0gdW5pZm9ybVRwbC50eXBlICsgJ3YnO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh1bmlmb3JtVHBsLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsdS52YWx1ZS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzNmJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICc0Zic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWVbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vua293biBsaWdodCB1bmlmb3JtIHR5cGUgJyArIHVuaWZvcm1UcGwudHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBsaWdodEdyb3Vwcy5wdXNoKGdyb3VwSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE51bWJlckNoYW5nZWRMaWdodEdyb3VwczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gdGhpcy5fbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaWdodE51bWJlckNoYW5nZWQoZ3JvdXBJZCkpIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0R3JvdXBzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgaWYgbGlnaHQgZ3JvdXAgaXMgZGlmZmVyZW50IHdpdGggc2luY2UgbGFzdCBmcmFtZVxyXG4gICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1cGRhdGUgc2hhZGVyIGFuZCBzY2VuZSdzIHVuaWZvcm1zIGluIFJlbmRlcmVyLnJlbmRlclxyXG4gICAgaXNMaWdodE51bWJlckNoYW5nZWQ6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgdmFyIHByZXZMaWdodE51bWJlciA9IHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXI7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIXByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0c051bWJlcnM6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAobGlnaHRHcm91cCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodFByb2dyYW1LZXlzW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRMaWdodFVuaWZvcm1zOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIHNldFVuaWZvcm1zKHVuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IHVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAobHUudHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXhTbG90cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbHUudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBsdS52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QocmVuZGVyZXIsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhTbG90cy5wdXNoKHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0ocmVuZGVyZXIuZ2wsICcxaXYnLCBzeW1ib2wsIHRleFNsb3RzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgbHUudHlwZSwgc3ltYm9sLCBsdS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocHJvZ3JhbSwgbGlnaHRHcm91cCwgcmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgc2V0VW5pZm9ybXModGhpcy5fbGlnaHRVbmlmb3Jtc1tsaWdodEdyb3VwXSwgcHJvZ3JhbSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAvLyBTZXQgc2hhZG93c1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLnNoYWRvd1VuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNlbGYsIGNsZWFyIGFsbCB0aGUgc2NlbmUgb2JqZWN0c1xyXG4gICAgICogQnV0IHJlc291cmNlcyBvZiBnbCBsaWtlIHRleHV0dXJlLCBzaGFkZXIgd2lsbCBub3QgYmUgZGlzcG9zZWQuXHJcbiAgICAgKiBNb3N0bHkgeW91IHNob3VsZCB1c2UgZGlzcG9zZVNjZW5lIG1ldGhvZCBpbiBSZW5kZXJlciB0byBkbyBkaXNwb3NlLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb3BhcXVlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zcGFyZW50TGlzdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodFVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnkgPSB7fTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBsaWdodFNvcnRGdW5jKGEsIGIpIHtcclxuICAgIGlmIChiLmNhc3RTaGFkb3cgJiYgIWEuY2FzdFNoYWRvdykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTY2VuZTtcclxuIiwidmFyIERJUlRZX1BSRUZJWCA9ICdfX2R0X18nO1xyXG5cclxudmFyIENhY2hlID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX2NvbnRleHRJZCA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIHVzZTogZnVuY3Rpb24gKGNvbnRleHRJZCwgZG9jdW1lbnRTY2hlbWEpIHtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGlmICghY2FjaGVzW2NvbnRleHRJZF0pIHtcclxuICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSB7fTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSBkb2N1bWVudFNjaGVtYSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRleHRJZCA9IGNvbnRleHRJZDtcclxuXHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNhY2hlc1tjb250ZXh0SWRdO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dFtrZXldID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkaXJ0eUFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZyZXNoOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2hBbGw6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2ldW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xyXG4gICAgICAgIHJldHVybiAgIWNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICB8fCBjb250ZXh0W2tleV0gPT09IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0SWQpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWxldGU6IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY29udGV4dFtrZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhckFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlcyA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGVhY2hDb250ZXh0IDogZnVuY3Rpb24gKGNiLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWNoZXMpO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNiICYmIGNiLmNhbGwoY29udGV4dCwga2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgbWlzczogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiAhIHRoaXMuX2NvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufTtcclxuXHJcbkNhY2hlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhY2hlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FjaGU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5mdW5jdGlvbiBnZXRBcnJheUN0b3JCeVR5cGUgKHR5cGUpIHtcclxuICAgIHJldHVybiAoe1xyXG4gICAgICAgICdieXRlJzogdmVuZG9yLkludDhBcnJheSxcclxuICAgICAgICAndWJ5dGUnOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgICAgICAnc2hvcnQnOiB2ZW5kb3IuSW50MTZBcnJheSxcclxuICAgICAgICAndXNob3J0JzogdmVuZG9yLlVpbnQxNkFycmF5XHJcbiAgICB9KVt0eXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYWtlQXR0cktleShhdHRyTmFtZSkge1xyXG4gICAgcmV0dXJuICdhdHRyXycgKyBhdHRyTmFtZTtcclxufVxyXG4vKipcclxuICogR2VvbWV0cnlCYXNlIGF0dHJpYnV0ZVxyXG4gKiBAYWxpYXMgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gQXR0cmlidXRlKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRyaWJ1dGUgdHlwZVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdieXRlJ2BcclxuICAgICAqICArIGAndWJ5dGUnYFxyXG4gICAgICogICsgYCdzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ3VzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ2Zsb2F0J2AgTW9zdCBjb21tb25seSB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogU2l6ZSBvZiBhdHRyaWJ1dGUgY29tcG9uZW50LiAxIC0gNC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICAvKipcclxuICAgICAqIFNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdQT1NJVElPTidgXHJcbiAgICAgKiAgKyBgJ05PUk1BTCdgXHJcbiAgICAgKiAgKyBgJ0JJTk9STUFMJ2BcclxuICAgICAqICArIGAnVEFOR0VOVCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEXzEnYFxyXG4gICAgICogICsgYCdDT0xPUidgXHJcbiAgICAgKiAgKyBgJ0pPSU5UJ2BcclxuICAgICAqICArIGAnV0VJR0hUJ2BcclxuICAgICAqXHJcbiAgICAgKiBJbiBzaGFkZXIsIGF0dHJpYnV0ZSB3aXRoIHNhbWUgc2VtYW50aWMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG1hcHBlZC4gRm9yIGV4YW1wbGU6XHJcbiAgICAgKiBgYGBnbHNsXHJcbiAgICAgKiBhdHRyaWJ1dGUgdmVjMyBwb3M6IFBPU0lUSU9OXHJcbiAgICAgKiBgYGBcclxuICAgICAqIHdpbGwgdXNlIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2l0aCBzZW1hbnRpYyBQT1NJVElPTiBpbiBnZW9tZXRyeSwgbm8gbWF0dGVyIHdoYXQgbmFtZSBpdCB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cclxuICAgICAqIEB0eXBlIHtUeXBlZEFycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAvLyBJbml0IGdldHRlciBzZXR0ZXJcclxuICAgIHN3aXRjaCAoc2l6ZSkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVtpZHhdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2lkeF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gQ29weSBmcm9tIHNvdXJjZSB0byB0YXJnZXRcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3RhcmdldF0gPSB0aGlzLnZhbHVlW3RhcmdldF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeCAqIDJdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeCAqIDIgKyAxXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMjtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAyO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSBpZHggKiAzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4M107XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4MyArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDMgKyAyXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4MyArIDJdID0gdmFsWzJdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDM7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gMztcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeDRdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeDQgKyAxXTtcclxuICAgICAgICAgICAgICAgIG91dFsyXSA9IGFycltpZHg0ICsgMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbM10gPSBhcnJbaWR4NCArIDNdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDRdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDNdID0gdmFsWzNdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDQ7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gNDtcclxuICAgICAgICAgICAgICAgIC8vIGNvcHlXaXRoaW4gaXMgZXh0cmVtZWx5IHNsb3dcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgM10gPSBhcnJbc291cmNlICsgM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgaXRlbSB2YWx1ZSBhdCBnaXZlIGluZGV4LiBTZWNvbmQgcGFyYW1ldGVyIHZhbCBpcyBudW1iZXIgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXXxudW1iZXJ9IHZhbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuc2V0KDAsIFsxLCAxLCAxXSk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgb3V0IGlzIG5vIG5lZWQgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXX0gW291dF1cclxuICogQGV4YW1wbGVcclxuICogZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmdldCgwLCBvdXQpO1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIHZlcnRleCBjb3VudFxyXG4gKiBAcGFyYW0ge251bWJlcn0gblZlcnRleFxyXG4gKi9cclxuQXR0cmlidXRlLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKG5WZXJ0ZXgpIHtcclxuICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCAhPSBuVmVydGV4ICogdGhpcy5zaXplKSB7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoblZlcnRleCAqIHRoaXMuc2l6ZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhdHRyaWJ1dGUgd2l0aCBnaXZlbiBhcnJheS4gV2hpY2ggY2FuIGJlIDEgZGltZW5zaW9uYWwgb3IgMiBkaW1lbnNpb25hbFxyXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbLTEsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDBdXHJcbiAqICApO1xyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbIFstMSwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDEsIDBdIF1cclxuICogICk7XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xyXG4gICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgIHZhciB2YWx1ZTtcclxuICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgaWYgKGFycmF5WzBdICYmIChhcnJheVswXS5sZW5ndGgpKSB7XHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xyXG4gICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbn07XHJcblxyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oY29weVZhbHVlKSB7XHJcbiAgICB2YXIgcmV0ID0gbmV3IEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHRoaXMudHlwZSwgdGhpcy5zaXplLCB0aGlzLnNlbWFudGljKTtcclxuICAgIC8vIEZJWE1FXHJcbiAgICBpZiAoY29weVZhbHVlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd0b2RvJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQXR0cmlidXRlQnVmZmVyKG5hbWUsIHR5cGUsIGJ1ZmZlciwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLnNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG5cclxuICAgIC8vIFRvIGJlIHNldCBpbiBtZXNoXHJcbiAgICAvLyBzeW1ib2wgaW4gdGhlIHNoYWRlclxyXG4gICAgdGhpcy5zeW1ib2wgPSAnJztcclxuXHJcbiAgICAvLyBOZWVkcyByZW1vdmUgZmxhZ1xyXG4gICAgdGhpcy5uZWVkc1JlbW92ZSA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJbmRpY2VzQnVmZmVyKGJ1ZmZlcikge1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLmNvdW50ID0gMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJhc2Ugb2YgYWxsIGdlb21ldHJ5LiBVc2Uge0BsaW5rIGNsYXkuR2VvbWV0cnl9IGZvciBjb21tb24gM0QgdXNhZ2UuXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5QmFzZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnlCYXNlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEluZGljZXMgb2YgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQxNkFycmF5fFVpbnQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluZGljZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHZlcnRpY2VzIGRhdGEgZHluYW1pY2FsbHkgdXBkYXRlZC5cclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIHZhbHVlIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXIgZmlyc3QgcmVuZGVyIGlmIGR5YW5taWMgaXMgZmFsc2UuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2VuYWJsZWRBdHRyaWJ1dGVzOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgLy8gSW5pdCBpdCBoZXJlIHRvIGF2b2lkIGRlb3B0aW1pemF0aW9uIHdoZW4gaXQncyBhc3NpZ25lZCBpbiBhcHBsaWNhdGlvbiBkeW5hbWljYWxseVxyXG4gICAgICAgIF9fdXNlZDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fYXR0cmlidXRlTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyk7XHJcblxyXG4gICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTWFpbiBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIHRvIGNvdW50IHZlcnRleCBudW1iZXJcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG1haW5BdHRyaWJ1dGU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiB4LCB5IGFyZSBOREMuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAoeCwgeSwgcmVuZGVyZXIsIGNhbWVyYSwgcmVuZGVyYWJsZSwgb3V0KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcmF5IHBpY2tpbmcgYWxnb3JpdGhtIGluc3RlYWQgb2YgZGVmYXVsdFxyXG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogKHJheTogY2xheS5SYXksIHJlbmRlcmFibGU6IGNsYXkuUmVuZGVyYWJsZSwgb3V0OiBBcnJheSkgPT4gYm9vbGVhblxyXG4gICAgICogYGBgXHJcbiAgICAgKiBAdHlwZSB7P0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBwaWNrQnlSYXk6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIGF0dHJpYnV0ZXMgYW5kIGluZGljZXMgaW4gZ2VvbWV0cnkgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogVXN1YWxseSBjYWxsZWQgYWZ0ZXIgeW91IGNoYW5nZSB0aGUgZGF0YSBpbiBhdHRyaWJ1dGVzLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHlBdHRyaWJ1dGUoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5SW5kaWNlcygpO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHkoJ2FueScpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0aGUgaW5kaWNlcyBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5SW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdpbmRpY2VzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBhdHRyaWJ1dGVzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0ck5hbWVdXHJcbiAgICAgKi9cclxuICAgIGRpcnR5QXR0cmlidXRlOiBmdW5jdGlvbiAoYXR0ck5hbWUpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbChtYWtlQXR0cktleShhdHRyTmFtZSkpO1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdhdHRyaWJ1dGVzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG91dFxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKGlkeCA8IHRoaXMudHJpYW5nbGVDb3VudCAmJiBpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIG91dFswXSA9IGluZGljZXNbaWR4ICogM107XHJcbiAgICAgICAgICAgIG91dFsxXSA9IGluZGljZXNbaWR4ICogMyArIDFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSBpbmRpY2VzW2lkeCAqIDMgKyAyXTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBhcnIpIHtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICBpbmRpY2VzW2lkeCAqIDNdID0gYXJyWzBdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDFdID0gYXJyWzFdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDJdID0gYXJyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1VzZUluZGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmluZGljZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSBpbmRpY2VzIGZyb20gYW4gYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gICAgICovXHJcbiAgICBpbml0SW5kaWNlc0Zyb21BcnJheTogZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gdGhpcy52ZXJ0ZXhDb3VudCA+IDB4ZmZmZlxyXG4gICAgICAgICAgICA/IHZlbmRvci5VaW50MzJBcnJheSA6IHZlbmRvci5VaW50MTZBcnJheTtcclxuICAgICAgICAvLyBDb252ZXJ0IDJkIGFycmF5IHRvIGZsYXRcclxuICAgICAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IDM7XHJcblxyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5Lmxlbmd0aCAqIHNpemUpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW24rK10gPSBhcnJheVtpXVtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluZGljZXMgPSB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VtYW50aWNdXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYiA9IG5ldyBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHJpYjtcclxuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYjtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgdmFyIGlkeCA9IGF0dHJpYnV0ZUxpc3QuaW5kZXhPZihuYW1lKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0cmlidXRlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlfVxyXG4gICAgICovXHJcbiAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW5hYmxlZCBhdHRyaWJ1dGVzIG5hbWUgbGlzdFxyXG4gICAgICogQXR0cmlidXRlIHdoaWNoIGhhcyB0aGUgc2FtZSB2ZXJ0ZXggbnVtYmVyIHdpdGggcG9zaXRpb24gaXMgdHJlYXRlZCBhcyBhIGVuYWJsZWQgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgICAqL1xyXG4gICAgZ2V0RW5hYmxlZEF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLl9lbmFibGVkQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgLy8gQ2FjaGVcclxuICAgICAgICBpZiAoZW5hYmxlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gdGhpcy52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZS5sZW5ndGggPT09IG5WZXJ0ZXggKiBhdHRyaWIuc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbmFibGVkQXR0cmlidXRlcyA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QnVmZmVyQ2h1bmtzOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGlzQXR0cmlidXRlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgIHZhciBpc0luZGljZXNEaXJ0eSA9IGNhY2hlLmlzRGlydHkoJ2luZGljZXMnKTtcclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnVmZmVyKHJlbmRlcmVyLmdsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpO1xyXG4gICAgICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLmZyZXNoKG1ha2VBdHRyS2V5KGVuYWJsZWRBdHRyaWJ1dGVzW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2F0dHJpYnV0ZXMnKTtcclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2luZGljZXMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZnJlc2goJ2FueScpO1xyXG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlQnVmZmVyOiBmdW5jdGlvbiAoX2dsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICB2YXIgZmlyc3RVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWNodW5rcykge1xyXG4gICAgICAgICAgICBjaHVua3MgPSBbXTtcclxuICAgICAgICAgICAgLy8gSW50aWFsaXplXHJcbiAgICAgICAgICAgIGNodW5rc1swXSA9IHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlcjogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ2NodW5rcycsIGNodW5rcyk7XHJcbiAgICAgICAgICAgIGZpcnN0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSBjaHVuay5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVyTWFwID0ge307XHJcbiAgICAgICAgICAgIGlmICghZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlck1hcFthdHRyaWJ1dGVCdWZmZXJzW2ldLm5hbWVdID0gYXR0cmlidXRlQnVmZmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBGSVhNRSBJZiBzb21lIGF0dHJpYnV0ZXMgcmVtb3ZlZFxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbbmFtZV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckluZm87XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJNYXBbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IF9nbC5jcmVhdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYWNoZS5pc0RpcnR5KG1ha2VBdHRyS2V5KG5hbWUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHdoZW4gdGhleSBhcmUgZGlydHkuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVXNlIEJ1ZmZlclN1YkRhdGE/XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuQVJSQVlfQlVGRkVSLCBhdHRyaWJ1dGUudmFsdWUsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnNba10gPSBuZXcgQXR0cmlidXRlQnVmZmVyKG5hbWUsIGF0dHJpYnV0ZS50eXBlLCBidWZmZXIsIGF0dHJpYnV0ZS5zaXplLCBhdHRyaWJ1dGUuc2VtYW50aWMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlcyBidWZmZXJzLlxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBrOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJ1dGVCdWZmZXJzW2ldLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVycy5sZW5ndGggPSBrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpICYmIChpc0luZGljZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyID0gbmV3IEluZGljZXNCdWZmZXIoX2dsLmNyZWF0ZUJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgICAgIGNodW5rLmluZGljZXNCdWZmZXIgPSBpbmRpY2VzQnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNCdWZmZXIuY291bnQgPSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN2ZXJ0ZXhDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3ZlcnRleENvdW50Jywge1xyXG5cclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWFpbkF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1t0aGlzLm1haW5BdHRyaWJ1dGVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtYWluQXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMuX2F0dHJpYnV0ZUxpc3RbMF1dO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUgfHwgIW1haW5BdHRyaWJ1dGUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtYWluQXR0cmlidXRlLnZhbHVlLmxlbmd0aCAvIG1haW5BdHRyaWJ1dGUuc2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgY2xheS5HZW9tZXRyeUJhc2UjdHJpYW5nbGVDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3RyaWFuZ2xlQ291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIGlmICghaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kaWNlcy5sZW5ndGggLyAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbkdlb21ldHJ5QmFzZS5TVEFUSUNfRFJBVyA9IGdsZW51bS5TVEFUSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLkRZTkFNSUNfRFJBVyA9IGdsZW51bS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVyA9IGdsZW51bS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXIgPSBBdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyID0gSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUgPSBBdHRyaWJ1dGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZW9tZXRyeUJhc2U7XHJcbiIsImltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlIGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuXHJcbnZhciB2ZWMzQ3JlYXRlID0gdmVjMy5jcmVhdGU7XHJcbnZhciB2ZWMzQWRkID0gdmVjMy5hZGQ7XHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcblxyXG52YXIgQXR0cmlidXRlID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZTtcclxuXHJcbi8qKlxyXG4gKiBHZW9tZXRyeSBpbiBDbGF5R0wgY29udGFpbnMgdmVydGV4IGF0dHJpYnV0ZXMgb2YgbWVzaC4gVGhlc2UgdmVydGV4IGF0dHJpYnV0ZXMgd2lsbCBiZSBmaW5hbGx5IHByb3ZpZGVkIHRvIHRoZSB7QGxpbmsgY2xheS5TaGFkZXJ9LlxyXG4gKiBEaWZmZXJlbnQge0BsaW5rIGNsYXkuU2hhZGVyfSBuZWVkcyBkaWZmZXJlbnQgYXR0cmlidXRlcy4gSGVyZSBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBidWlsdGluIHNoYWRlcnMuXHJcbiAqXHJcbiAqICsgcG9zaXRpb246IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRleGNvb3JkMDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgY29sb3I6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHdlaWdodDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgam9pbnQ6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIG5vcm1hbDogYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRhbmdlbnQ6IGBjbGF5LnN0YW5kYXJkYFxyXG4gKlxyXG4gKiAjIyMjIENyZWF0ZSBhIHByb2NlZHVyYWwgZ2VvbWV0cnlcclxuICpcclxuICogQ2xheUdMIHByb3ZpZGVzIGEgY291cGxlIG9mIGJ1aWx0aW4gcHJvY2VkdXJhbCBnZW9tZXRyaWVzLiBJbmxjdWRpbmc6XHJcbiAqXHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN1YmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuUGxhbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5Db25lfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZX1cclxuICpcclxuICogSXQncyBzaW1wbGUgdG8gY3JlYXRlIGEgYmFzaWMgZ2VvbWV0cnkgd2l0aCB0aGVzZSBjbGFzc2VzLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgc3BoZXJlID0gbmV3IGNsYXkuZ2VvbWV0cnkuU3BoZXJlKHtcclxuICAgIHJhZGl1czogMlxyXG59KTtcclxuYGBgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIHRoZSBnZW9tZXRyeSBkYXRhIGJ5IHlvdXJzZWxmXHJcbiAqXHJcbiAqIFVzdWFsbHkgdGhlIHZlcnRleCBhdHRyaWJ1dGVzIGRhdGEgYXJlIGNyZWF0ZWQgYnkgdGhlIHtAbGluayBjbGF5LmxvYWRlci5HTFRGfSBvciBwcm9jZWR1cmFsIGdlb21ldHJpZXMgbGlrZSB7QGxpbmsgY2xheS5nZW9tZXRyeS5TcGhlcmV9LlxyXG4gKiBCZXNpZGVzIHRoZXNlLCB5b3UgY2FuIGNyZWF0ZSB0aGUgZGF0YSBtYW51YWxseS4gSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIHRvIGNyZWF0ZSBhIHRyaWFuZ2xlLlxyXG5gYGBqc1xyXG52YXIgVFJJQU5HTEVfUE9TSVRJT05TID0gW1xyXG4gICAgWy0wLjUsIC0wLjUsIDBdLFxyXG4gICAgWzAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMCwgMC41LCAwXVxyXG5dO1xyXG52YXIgZ2VvbWV0cnkgPSBuZXcgY2xheS5TdGF0aWNHZW9tZXRyeUJhc2UoKTtcclxuLy8gQWRkIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZS5cclxuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkoVFJJQU5HTEVfUE9TSVRJT05TKTtcclxuYGBgXHJcbiAqIFRoZW4geW91IGNhbiB1c2UgdGhlIHV0aWxpdHkgbWV0aG9kcyBsaWtlIGBnZW5lcmF0ZVZlcnRleE5vcm1hbHNgLCBgZ2VuZXJhdGVUYW5nZW50c2AgdG8gY3JlYXRlIHRoZSByZW1haW5pbmcgbmVjZXNzYXJ5IGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqXHJcbiAqICMjIyMgVXNlIHdpdGggY3VzdG9tIHNoYWRlcnNcclxuICpcclxuICogSWYgeW91IHdhbid0IHRvIHdyaXRlIGN1c3RvbSBzaGFkZXJzLiBEb24ndCBmb3JnZXQgdG8gYWRkIFNFTUFOVElDUyB0byB0aGVzZSBhdHRyaWJ1dGVzLiBGb3IgZXhhbXBsZVxyXG4gKlxyXG4gYGBgZ2xzbFxyXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XHJcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XHJcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xyXG5cclxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcclxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xyXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XHJcbmBgYFxyXG4gKiBUaGVzZSBgUE9TSVRJT05gLCBgVEVYQ09PUkRfMGAsIGBOT1JNQUxgIGFyZSBTRU1BTlRJQ1Mgd2hpY2ggd2lsbCBtYXAgdGhlIGF0dHJpYnV0ZXMgaW4gc2hhZGVyIHRvIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBHZW9tZXRyeUJhc2VcclxuICpcclxuICogQXZhaWxhYmxlIGF0dHJpYnV0ZXMgU0VNQU5USUNTIGluY2x1ZGVzIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYFRFWENPT1JEXzFgIGBOT1JNQUxgLCBgVEFOR0VOVGAsIGBDT0xPUmAsIGBXRUlHSFRgLCBgSk9JTlRgLlxyXG4gKlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5HZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5ID0gR2VvbWV0cnlCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS4gSW5jbHVkaW5nOlxyXG4gICAgICAgICAqICArIGBwb3NpdGlvbmBcclxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQwYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDFgXHJcbiAgICAgICAgICogICsgYG5vcm1hbGBcclxuICAgICAgICAgKiAgKyBgdGFuZ2VudGBcclxuICAgICAgICAgKiAgKyBgY29sb3JgXHJcbiAgICAgICAgICogICsgYHdlaWdodGBcclxuICAgICAgICAgKiAgKyBgam9pbnRgXHJcbiAgICAgICAgICogICsgYGJhcnljZW50cmljYFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBjbGF5Lkdlb21ldHJ5LkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEF0dHJpYnV0ZSgncG9zaXRpb24nLCAnZmxvYXQnLCAzLCAnUE9TSVRJT04nKSxcclxuICAgICAgICAgICAgdGV4Y29vcmQwOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDAnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMCcpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDE6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMScsICdmbG9hdCcsIDIsICdURVhDT09SRF8xJyksXHJcbiAgICAgICAgICAgIG5vcm1hbDogbmV3IEF0dHJpYnV0ZSgnbm9ybWFsJywgJ2Zsb2F0JywgMywgJ05PUk1BTCcpLFxyXG4gICAgICAgICAgICB0YW5nZW50OiBuZXcgQXR0cmlidXRlKCd0YW5nZW50JywgJ2Zsb2F0JywgNCwgJ1RBTkdFTlQnKSxcclxuICAgICAgICAgICAgY29sb3I6IG5ldyBBdHRyaWJ1dGUoJ2NvbG9yJywgJ2Zsb2F0JywgNCwgJ0NPTE9SJyksXHJcbiAgICAgICAgICAgIC8vIFNraW5uaW5nIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgLy8gRWFjaCB2ZXJ0ZXggY2FuIGJlIGJpbmQgdG8gNCBib25lcywgYmVjYXVzZSB0aGVcclxuICAgICAgICAgICAgLy8gc3VtIG9mIHdlaWdodHMgaXMgMSwgc28gdGhlIHdlaWdodHMgaXMgc3RvcmVkIGluIHZlYzMgYW5kIHRoZSBsYXN0XHJcbiAgICAgICAgICAgIC8vIGNhbiBiZSBjYWxjdWxhdGVkIGJ5IDEtdy54LXcueS13LnpcclxuICAgICAgICAgICAgd2VpZ2h0OiBuZXcgQXR0cmlidXRlKCd3ZWlnaHQnLCAnZmxvYXQnLCAzLCAnV0VJR0hUJyksXHJcbiAgICAgICAgICAgIGpvaW50OiBuZXcgQXR0cmlidXRlKCdqb2ludCcsICdmbG9hdCcsIDQsICdKT0lOVCcpLFxyXG4gICAgICAgICAgICAvLyBGb3Igd2lyZWZyYW1lIGRpc3BsYXlcclxuICAgICAgICAgICAgLy8gaHR0cDovL2NvZGVmbG93Lm9yZy9lbnRyaWVzLzIwMTIvYXVnLzAyL2Vhc3ktd2lyZWZyYW1lLWRpc3BsYXktd2l0aC1iYXJ5Y2VudHJpYy1jb29yZGluYXRlcy9cclxuICAgICAgICAgICAgYmFyeWNlbnRyaWM6IG5ldyBBdHRyaWJ1dGUoJ2JhcnljZW50cmljJywgJ2Zsb2F0JywgMywgbnVsbCksXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWxjdWxhdGVkIGJvdW5kaW5nIGJveCBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5LnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgbWFpbkF0dHJpYnV0ZTogJ3Bvc2l0aW9uJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBib3VuZGluZ0JveCBvZiBHZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVCb3VuZGluZ0JveDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBiYm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICBpZiAoIWJib3gpIHtcclxuICAgICAgICAgICAgYmJveCA9IHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc0FyciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICBpZiAocG9zQXJyICYmIHBvc0Fyci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1pbkFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1heEFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgcG9zQXJyLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgIHZhciB4ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHogPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICh4IDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5IDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6IDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHo7IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeCA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB4OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB5OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeiA+IG1heEFyclsyXSkgeyBtYXhBcnJbMl0gPSB6OyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciB2ZXJ0ZXguXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMgfHwgbm9ybWFscy5sZW5ndGggIT09IHBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkocG9zaXRpb25zLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSZXNldFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaV0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcbiAgICAgICAgICAgIC8vIEFscmVhZHkgYmUgd2VpZ2h0ZWQgYnkgdGhlIHRyaWFuZ2xlIGFyZWFcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMytpXSA9IG5vcm1hbHNbaTEqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMraV0gPSBub3JtYWxzW2kyKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMyozK2ldID0gbm9ybWFsc1tpMyozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmVjM1NldChuLCBub3JtYWxzW2ldLCBub3JtYWxzW2krMV0sIG5vcm1hbHNbaSsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzBdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzFdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgbm9ybWFscyBwZXIgZmFjZS5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVGYWNlTm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShuLCBuKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kxKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHRhbmdlbnRzIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVGFuZ2VudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIGlmICghYXR0cmlidXRlcy50YW5nZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkoblZlcnRleCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghdGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbWV0cnkgd2l0aG91dCB0ZXhjb29yZHMgY2FuXFwndCBnZW5lcmF0ZSB0YW5nZW50cy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRhbjEgPSBbXTtcclxuICAgICAgICB2YXIgdGFuMiA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRhbjFbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgICAgIHRhbjJbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2RpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgdGRpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGkrKztcclxuICAgICAgICAgICAgICAgIGkyID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzdDFzID0gdGV4Y29vcmRzW2kxICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDJzID0gdGV4Y29vcmRzW2kyICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDNzID0gdGV4Y29vcmRzW2kzICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDF0ID0gdGV4Y29vcmRzW2kxICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QydCA9IHRleGNvb3Jkc1tpMiAqIDIgKyAxXSxcclxuICAgICAgICAgICAgICAgIHN0M3QgPSB0ZXhjb29yZHNbaTMgKiAyICsgMV0sXHJcblxyXG4gICAgICAgICAgICAgICAgcDF4ID0gcG9zaXRpb25zW2kxICogM10sXHJcbiAgICAgICAgICAgICAgICBwMnggPSBwb3NpdGlvbnNbaTIgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAzeCA9IHBvc2l0aW9uc1tpMyAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDF5ID0gcG9zaXRpb25zW2kxICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDJ5ID0gcG9zaXRpb25zW2kyICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDN5ID0gcG9zaXRpb25zW2kzICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDF6ID0gcG9zaXRpb25zW2kxICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDJ6ID0gcG9zaXRpb25zW2kyICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDN6ID0gcG9zaXRpb25zW2kzICogMyArIDJdO1xyXG5cclxuICAgICAgICAgICAgdmFyIHgxID0gcDJ4IC0gcDF4LFxyXG4gICAgICAgICAgICAgICAgeDIgPSBwM3ggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB5MSA9IHAyeSAtIHAxeSxcclxuICAgICAgICAgICAgICAgIHkyID0gcDN5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgejEgPSBwMnogLSBwMXosXHJcbiAgICAgICAgICAgICAgICB6MiA9IHAzeiAtIHAxejtcclxuXHJcbiAgICAgICAgICAgIHZhciBzMSA9IHN0MnMgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgczIgPSBzdDNzIC0gc3QxcyxcclxuICAgICAgICAgICAgICAgIHQxID0gc3QydCAtIHN0MXQsXHJcbiAgICAgICAgICAgICAgICB0MiA9IHN0M3QgLSBzdDF0O1xyXG5cclxuICAgICAgICAgICAgdmFyIHIgPSAxLjAgLyAoczEgKiB0MiAtIHQxICogczIpO1xyXG4gICAgICAgICAgICBzZGlyWzBdID0gKHQyICogeDEgLSB0MSAqIHgyKSAqIHI7XHJcbiAgICAgICAgICAgIHNkaXJbMV0gPSAodDIgKiB5MSAtIHQxICogeTIpICogcjtcclxuICAgICAgICAgICAgc2RpclsyXSA9ICh0MiAqIHoxIC0gdDEgKiB6MikgKiByO1xyXG5cclxuICAgICAgICAgICAgdGRpclswXSA9IChzMSAqIHgyIC0gczIgKiB4MSkgKiByO1xyXG4gICAgICAgICAgICB0ZGlyWzFdID0gKHMxICogeTIgLSBzMiAqIHkxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMl0gPSAoczEgKiB6MiAtIHMyICogejEpICogcjtcclxuXHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpMV0sIHRhbjFbaTFdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kyXSwgdGFuMVtpMl0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTNdLCB0YW4xW2kzXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpMV0sIHRhbjJbaTFdLCB0ZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kyXSwgdGFuMltpMl0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTNdLCB0YW4yW2kzXSwgdGRpcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXAgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG5Dcm9zc1QgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgblswXSA9IG5vcm1hbHNbaSAqIDNdO1xyXG4gICAgICAgICAgICBuWzFdID0gbm9ybWFsc1tpICogMyArIDFdO1xyXG4gICAgICAgICAgICBuWzJdID0gbm9ybWFsc1tpICogMyArIDJdO1xyXG4gICAgICAgICAgICB2YXIgdCA9IHRhbjFbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6ZVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHRtcCwgbiwgdmVjMy5kb3QobiwgdCkpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih0bXAsIHQsIHRtcCk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcCwgdG1wKTtcclxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhhbmRlZG5lc3MuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3MobkNyb3NzVCwgbiwgdCk7XHJcbiAgICAgICAgICAgIHRhbmdlbnRzW2kgKiA0XSA9IHRtcFswXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAxXSA9IHRtcFsxXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAyXSA9IHRtcFsyXTtcclxuICAgICAgICAgICAgLy8gUEVORElORyBjYW4gY29uZmlnID9cclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAzXSA9IHZlYzMuZG90KG5Dcm9zc1QsIHRhbjJbaV0pIDwgMC4wID8gLTEuMCA6IDEuMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHZlcnRpY2VzIGFyZSBub3Qgc2hhcmVkIGJ5IGRpZmZlcmVudCBpbmRpY2VzLlxyXG4gICAgICovXHJcbiAgICBpc1VuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleENvdW50ID09PSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgdW5pcXVlIHZlcnRleCBmb3IgZWFjaCBpbmRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVVbmlxdWVWZXJ0ZXg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQgfHwgIXRoaXMuaW5kaWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbmRpY2VzLmxlbmd0aCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQzMkFycmF5KHRoaXMuaW5kaWNlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVMaXN0ID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICB2YXIgb2xkQXR0clZhbHVlcyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lTGlzdFthXTtcclxuICAgICAgICAgICAgb2xkQXR0clZhbHVlc1tuYW1lXSA9IGF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0uaW5pdCh0aGlzLmluZGljZXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZU5hbWVMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlc1tuYW1lXS5zaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yICogc2l6ZSArIGtdID0gb2xkQXR0clZhbHVlc1tuYW1lXVtpaSAqIHNpemUgKyBrXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gY3Vyc29yO1xyXG4gICAgICAgICAgICBjdXJzb3IrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBmb3Igd2lyZWZyYW1lIGRyYXcuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlQmFyeWNlbnRyaWM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVW5pcXVlVmVydGV4KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVVuaXF1ZVZlcnRleCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlcy5iYXJ5Y2VudHJpYy52YWx1ZTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAvLyBBbHJlYWR5IGV4aXN0ZWQ7XHJcbiAgICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gaW5kaWNlcy5sZW5ndGggKiAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShpbmRpY2VzLmxlbmd0aCAqIDMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiB0aGlzLnZlcnRleENvdW50IC8gMyk7KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzID8gaW5kaWNlc1tpKytdIDogKGkgKiAzICsgaik7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpaSAqIDMgKyBqXSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IHRyYW5zZm9ybSB0byBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHZhciB0YW5nZW50cyA9IGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZTtcclxuXHJcbiAgICAgICAgbWF0cml4ID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIE5vcm1hbCBNYXRyaXhcclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZlYzNUcmFuc2Zvcm1NYXQ0ID0gdmVjMy50cmFuc2Zvcm1NYXQ0O1xyXG4gICAgICAgIHZhciB2ZWMzRm9yRWFjaCA9IHZlYzMuZm9yRWFjaDtcclxuICAgICAgICB2ZWMzRm9yRWFjaChwb3NpdGlvbnMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBtYXRyaXgpO1xyXG4gICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKG5vcm1hbHMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhbmdlbnRzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKHRhbmdlbnRzLCA0LCAwLCBudWxsLCB2ZWMzVHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnZW9tZXRyeSBkYXRhIGluIEdMIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIGlmIChjaHVua3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaHVua3MubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1tjXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlicyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnNba107XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnMuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsuaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihjaHVuay5pbmRpY2VzQnVmZmVyLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFvRXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbyA9IHRoaXMuX192YW9DYWNoZVtpZF0udmFvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhb0V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX192YW9DYWNoZSA9IHt9O1xyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbkdlb21ldHJ5LlNUQVRJQ19EUkFXID0gR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeS5EWU5BTUlDX0RSQVcgPSBHZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXO1xyXG5HZW9tZXRyeS5TVFJFQU1fRFJBVyA9IEdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZUJ1ZmZlciA9IEdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5LkluZGljZXNCdWZmZXIgPSBHZW9tZXRyeUJhc2UuSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5O1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGxhbmVcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQud2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdpZHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGxhbmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGxhbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBoZWlnaHRTZWdtZW50cyA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgdmFyIHdpZHRoU2VnbWVudHMgPSB0aGlzLndpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8PSBoZWlnaHRTZWdtZW50czsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0ID0geSAvIGhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8PSB3aWR0aFNlZ21lbnRzOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBzID0geCAvIHdpZHRoU2VnbWVudHM7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goWzIgKiBzIC0gMSwgMiAqIHQgLSAxLCAwXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2goW3MsIHRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKFswLCAwLCAxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoU2VnbWVudHMgJiYgeSA8IGhlaWdodFNlZ21lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB4ICsgeSAqICh3aWR0aFNlZ21lbnRzICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW2kgKyB3aWR0aFNlZ21lbnRzICsgMSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMubm9ybWFsLmZyb21BcnJheShub3JtYWxzKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0SW5kaWNlc0Zyb21BcnJheShmYWNlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLTEsIC0xLCAwKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBwbGFuZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuZGVwdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0Lmluc2lkZV1cclxuICovXHJcbnZhciBDdWJlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKipAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRlcHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnNpZGU6IGZhbHNlXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3ViZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjdWJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHtcclxuICAgICAgICAgICAgJ3B4JzogY3JlYXRlUGxhbmUoJ3B4JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ254JzogY3JlYXRlUGxhbmUoJ254JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B5JzogY3JlYXRlUGxhbmUoJ3B5JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmRlcHRoU2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbnknOiBjcmVhdGVQbGFuZSgnbnknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdweic6IGNyZWF0ZVBsYW5lKCdweicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueic6IGNyZWF0ZVBsYW5lKCdueicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJMaXN0ID0gWydwb3NpdGlvbicsICd0ZXhjb29yZDAnLCAnbm9ybWFsJ107XHJcbiAgICAgICAgdmFyIHZlcnRleE51bWJlciA9IDA7XHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmVydGV4TnVtYmVyICs9IHBsYW5lc1twb3NdLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmYWNlTnVtYmVyICs9IHBsYW5lc1twb3NdLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTGlzdFtrXV0uaW5pdCh2ZXJ0ZXhOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGZhY2VOdW1iZXIpO1xyXG4gICAgICAgIHZhciBmYWNlT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdmVydGV4T2Zmc2V0ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBwb3MgaW4gcGxhbmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBwbGFuZSA9IHBsYW5lc1twb3NdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyQXJyYXkgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyU2l6ZSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNOb3JtYWwgPSBhdHRyTmFtZSA9PT0gJ25vcm1hbCc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnNpZGUgJiYgaXNOb3JtYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTmFtZV0udmFsdWVbaSArIGF0dHJTaXplICogdmVydGV4T2Zmc2V0XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBwbGFuZS5pbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFuZS5pbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGljZXNbaSArIGZhY2VPZmZzZXRdID0gdmVydGV4T2Zmc2V0ICsgcGxhbmUuaW5kaWNlc1t0aGlzLmluc2lkZSA/IChsZW4gLSBpIC0gMSkgOiBpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmYWNlT2Zmc2V0ICs9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQgKz0gcGxhbmUudmVydGV4Q291bnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KDEsIDEsIDEpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIC0xKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQbGFuZShwb3MsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzKSB7XHJcblxyXG4gICAgcGxhbmVNYXRyaXguaWRlbnRpdHkoKTtcclxuXHJcbiAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoe1xyXG4gICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXHJcbiAgICAgICAgaGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzXHJcbiAgICB9KTtcclxuXHJcbiAgICBzd2l0Y2gocG9zKSB7XHJcbiAgICAgICAgY2FzZSAncHgnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbngnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCAtTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVYKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbnonOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHBsYW5lLmFwcGx5VHJhbnNmb3JtKHBsYW5lTWF0cml4KTtcclxuICAgIHJldHVybiBwbGFuZTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3ViZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0U2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpTGVuZ3RoXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzXVxyXG4gKi9cclxudmFyIFNwaGVyZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogNDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwaGlMZW5ndGg6IE1hdGguUEkgKiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFTdGFydDogMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFMZW5ndGg6IE1hdGguUEksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDFcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIHNwaGVyZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhDb3VudCA9ICh3aWR0aFNlZ21lbnRzICsgMSkgKiAoaGVpZ2h0U2VnbWVudHMgKyAxKTtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQodmVydGV4Q291bnQpO1xyXG4gICAgICAgIG5vcm1hbEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleENvdW50ID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcyA9IG5ldyBJbmRpY2VzQ3Rvcih3aWR0aFNlZ21lbnRzICogaGVpZ2h0U2VnbWVudHMgKiA2KTtcclxuXHJcbiAgICAgICAgdmFyIHgsIHksIHosXHJcbiAgICAgICAgICAgIHUsIHYsXHJcbiAgICAgICAgICAgIGksIGo7XHJcblxyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuICAgICAgICB2YXIgcGhpU3RhcnQgPSB0aGlzLnBoaVN0YXJ0O1xyXG4gICAgICAgIHZhciBwaGlMZW5ndGggPSB0aGlzLnBoaUxlbmd0aDtcclxuICAgICAgICB2YXIgdGhldGFTdGFydCA9IHRoaXMudGhldGFTdGFydDtcclxuICAgICAgICB2YXIgdGhldGFMZW5ndGggPSB0aGlzLnRoZXRhTGVuZ3RoO1xyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBkaXZpZGVyID0gMSAvIHJhZGl1cztcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDw9IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgdSA9IGkgLyB3aWR0aFNlZ21lbnRzO1xyXG4gICAgICAgICAgICAgICAgdiA9IGogLyBoZWlnaHRTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBYIGF4aXMgaXMgaW52ZXJ0ZWQgc28gdGV4dHVyZSBjYW4gYmUgbWFwcGVkIGZyb20gbGVmdCB0byByaWdodFxyXG4gICAgICAgICAgICAgICAgeCA9IC1yYWRpdXMgKiBNYXRoLmNvcyhwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB5ID0gcmFkaXVzICogTWF0aC5jb3ModGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB6ID0gcmFkaXVzICogTWF0aC5zaW4ocGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoKSAqIE1hdGguc2luKHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHg7IHBvc1sxXSA9IHk7IHBvc1syXSA9IHo7XHJcbiAgICAgICAgICAgICAgICB1dlswXSA9IHU7IHV2WzFdID0gdjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRBdHRyLnNldChvZmZzZXQsIHV2KTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIG5vcm1hbEF0dHIuc2V0KG9mZnNldCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTEsIGkyLCBpMywgaTQ7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB3aWR0aFNlZ21lbnRzICsgMTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHRTZWdtZW50czsgaiArKykge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaTIgPSBqICogbGVuICsgaTtcclxuICAgICAgICAgICAgICAgIGkxID0gKGogKiBsZW4gKyBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICBpNCA9IChqICsgMSkgKiBsZW4gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIGkzID0gKGogKyAxKSAqIGxlbiArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldChyYWRpdXMsIHJhZGl1cywgcmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXJhZGl1cywgLXJhZGl1cywgLXJhZGl1cyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZ2VuZXJhdG9yXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKi9cclxudmFyIFBhcmFtZXRyaWNTdXJmYWNlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0b3I6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGFyYW1ldHJpYyBzdXJmYWNlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xyXG5cclxuICAgICAgICBpZiAoIWdlbmVyYXRvciB8fCAhZ2VuZXJhdG9yLnggfHwgIWdlbmVyYXRvci55IHx8ICFnZW5lcmF0b3Iueikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4RnVuYyA9IGdlbmVyYXRvci54O1xyXG4gICAgICAgIHZhciB5RnVuYyA9IGdlbmVyYXRvci55O1xyXG4gICAgICAgIHZhciB6RnVuYyA9IGdlbmVyYXRvci56O1xyXG4gICAgICAgIHZhciB1UmFuZ2UgPSBnZW5lcmF0b3IudSB8fCBbMCwgMSwgMC4wNV07XHJcbiAgICAgICAgdmFyIHZSYW5nZSA9IGdlbmVyYXRvci52IHx8IFswLCAxLCAwLjA1XTtcclxuXHJcbiAgICAgICAgdmFyIHVOdW0gPSBNYXRoLmZsb29yKCh1UmFuZ2VbMV0gLSB1UmFuZ2VbMF0gKyB1UmFuZ2VbMl0pIC8gdVJhbmdlWzJdKTtcclxuICAgICAgICB2YXIgdk51bSA9IE1hdGguZmxvb3IoKHZSYW5nZVsxXSAtIHZSYW5nZVswXSArIHZSYW5nZVsyXSkgLyB2UmFuZ2VbMl0pO1xyXG5cclxuICAgICAgICBpZiAoIWlzRmluaXRlKHVOdW0pIHx8ICFpc0Zpbml0ZSh2TnVtKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZmluaXRlIGdlbmVyYXRvcicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE51bSA9IHVOdW0gKiB2TnVtO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KHZlcnRleE51bSk7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KHZlcnRleE51bSk7XHJcblxyXG4gICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmQgPSBbXTtcclxuICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtOyBqKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1TnVtOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gaSAqIHVSYW5nZVsyXSArIHVSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAqIHZSYW5nZVsyXSArIHZSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHhGdW5jKHUsIHYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdID0geUZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gPSB6RnVuYyh1LCB2KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFswXSA9IGkgLyAodU51bSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRbMV0gPSBqIC8gKHZOdW0gLSAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uc2V0KG5WZXJ0ZXgsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnNldChuVmVydGV4LCB0ZXhjb29yZCk7XHJcbiAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleE51bSA+IDB4ZmZmZiA/IFVpbnQzMkFycmF5IDogVWludDE2QXJyYXk7XHJcbiAgICAgICAgdmFyIG5JbmRpY2VzID0gKHVOdW0gLSAxKSAqICh2TnVtIC0gMSkgKiA2O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKG5JbmRpY2VzKTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdk51bSAtIDE7IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW0gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMiA9IGogKiB1TnVtICsgaTtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IChqICogdU51bSArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIHZhciBpNCA9IChqICsgMSkgKiB1TnVtICsgaSArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSAoaiArIDEpICogdU51bSArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFyYW1ldHJpY1N1cmZhY2U7XHJcbiIsIi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgdGV4dHVyZXMgbGlrZSBjb21wcmVzc2VkIHRleHR1cmUsIHRleHR1cmUyZCwgdGV4dHVyZWN1YmVcclxuICogVE9ETyBtYXBwaW5nXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgVGV4dHVyZSA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdpZHRoLCByZWFkb25seSB3aGVuIHRoZSB0ZXh0dXJlIHNvdXJjZSBpcyBpbWFnZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4dHVyZSBoZWlnaHQsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4ZWwgZGF0YSB0eXBlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9CWVRFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5IQUxGX0ZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5GTE9BVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0x9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0lOVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHR5cGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtYXQgb2YgdGV4ZWwgZGF0YVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SR0JBfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9DT01QT05FTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX1NURU5DSUx9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBTOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBUOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWFnRmlsdGVyOiBnbGVudW0uTElORUFSLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBlbmFibGUgbWltYXAuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5pc290cm9waWMgZmlsdGVyaW5nLCBlbmFibGVkIGlmIHZhbHVlIGlzIGxhcmdlciB0aGFuIDFcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYW5pc290cm9waWM6IDEsXHJcbiAgICAvLyBwaXhlbFN0b3JlaSBwYXJhbWV0ZXJzLCBub3QgYXZhaWxhYmxlIHdoZW4gdGV4dHVyZSBpcyB1c2VkIGFzIHJlbmRlciB0YXJnZXRcclxuICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sXHJcbiAgICAvKipcclxuICAgICAqIElmIGZsaXAgaW4geSBheGlzIGZvciBnaXZlbiBpbWFnZSBzb3VyY2VcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBmbGlwWTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZmxhZyB0byBpbmRpY2F0ZSBpZiB0ZXh0dXJlIHNvdXJjZSBpcyBzUkdCXHJcbiAgICAgKi9cclxuICAgIHNSR0I6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCA0XHJcbiAgICAgKi9cclxuICAgIHVucGFja0FsaWdubWVudDogNCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIER5bmFtaWMgb3B0aW9uIGZvciB0ZXh0dXJlIGxpa2UgdmlkZW9cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuXHJcbiAgICBOUE9UOiBmYWxzZSxcclxuXHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICBfX3VzZWQ6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5UZXh0dXJlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgZ2V0V2ViR0xUZXh0dXJlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcygnd2ViZ2xfdGV4dHVyZScpKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGEgbmV3IGdsIGNvbnRleHQsIGNyZWF0ZSBuZXcgdGV4dHVyZSBhbmQgc2V0IGRpcnR5IHRydWVcclxuICAgICAgICAgICAgY2FjaGUucHV0KCd3ZWJnbF90ZXh0dXJlJywgX2dsLmNyZWF0ZVRleHR1cmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYWNoZS5pc0RpcnR5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIHVuYmluZDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRleHR1cmUgaXMgZGlydHkgYW5kIHVwZGF0ZSBpbiB0aGUgbmV4dCBmcmFtZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWNoZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHt9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgY29tbW9uIHBhcmFtZXRlcnMgb2YgdGV4dHVyZVxyXG4gICAgdXBkYXRlQ29tbW9uOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19BTElHTk1FTlQsIHRoaXMudW5wYWNrQWxpZ25tZW50KTtcclxuXHJcbiAgICAgICAgLy8gVXNlIG9mIG5vbmUtcG93ZXIgb2YgdHdvIHRleHR1cmVcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3dlYmdsL3dpa2kvV2ViR0xfYW5kX09wZW5HTF9EaWZmZXJlbmNlc1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNSR0JFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3NSR0InKTtcclxuICAgICAgICAvLyBGYWxsYmFja1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCX0FMUEhBICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0JBO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5OUE9UID0gIXRoaXMuaXNQb3dlck9mVHdvKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEF2YWlsYWJsZVdyYXBTOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBTO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZVdyYXBUOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBUO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1pbkZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtaW5GaWx0ZXIgPSB0aGlzLm1pbkZpbHRlcjtcclxuICAgICAgICBpZiAodGhpcy5OUE9UIHx8ICF0aGlzLnVzZU1pcG1hcCkge1xyXG4gICAgICAgICAgICBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICAgICAgbWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1RcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1hZ0ZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hZ0ZpbHRlcjtcclxuICAgIH0sXHJcblxyXG4gICAgbmV4dEhpZ2hlc3RQb3dlck9mVHdvOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIC0teDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDMyOyBpIDw8PSAxKSB7XHJcbiAgICAgICAgICAgIHggPSB4IHwgeCA+PiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgICAgIGlmICh3ZWJnbFRleHR1cmUpe1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVUZXh0dXJlKHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiBpbWFnZSBvZiB0ZXh0dXJlIGlzIHZhbGlkIGFuZCBsb2FkZWQuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiB0ZXh0dXJlIHNpemUgaXMgcG93ZXIgb2YgdHdvXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qIERhdGFUeXBlICovXHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuQllURSA9IGdsZW51bS5CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuVU5TSUdORURfQllURSA9IGdsZW51bS5VTlNJR05FRF9CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU0hPUlQgPSBnbGVudW0uU0hPUlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9TSE9SVCA9IGdsZW51bS5VTlNJR05FRF9TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLklOVCA9IGdsZW51bS5JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlQgPSBnbGVudW0uVU5TSUdORURfSU5UO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuRkxPQVQgPSBnbGVudW0uRkxPQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5IQUxGX0ZMT0FUID0gMHg4RDYxO1xyXG5cclxuLyoqXHJcbiAqIFVOU0lHTkVEX0lOVF8yNF84X1dFQkdMIGZvciBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvblxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCA9IDM0MDQyO1xyXG5cclxuLyogUGl4ZWxGb3JtYXQgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCA9IGdsZW51bS5ERVBUSF9DT01QT05FTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMID0gZ2xlbnVtLkRFUFRIX1NURU5DSUw7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5BTFBIQSA9IGdsZW51bS5BTFBIQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQiA9IGdsZW51bS5SR0I7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5SR0JBID0gZ2xlbnVtLlJHQkE7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0UgPSBnbGVudW0uTFVNSU5BTkNFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTFVNSU5BTkNFX0FMUEhBID0gZ2xlbnVtLkxVTUlOQU5DRV9BTFBIQTtcclxuXHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0IgPSAweDhDNDA7XHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0JfQUxQSEEgPSAweDhDNDI7XHJcblxyXG4vKiBDb21wcmVzc2VkIFRleHR1cmUgKi9cclxuVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUID0gMHg4M0YwO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4M0YxO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzO1xyXG5cclxuLyogVGV4dHVyZU1hZ0ZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSID0gZ2xlbnVtLkxJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVNaW5GaWx0ZXIgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVI7XHJcblxyXG4vKiBUZXh0dXJlV3JhcE1vZGUgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJFUEVBVCA9IGdsZW51bS5SRVBFQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5DTEFNUF9UT19FREdFID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVQgPSBnbGVudW0uTUlSUk9SRURfUkVQRUFUO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XHJcbiIsInZhciBtYXRoVXRpbCA9IHt9O1xyXG5cclxubWF0aFV0aWwuaXNQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYgKHZhbHVlIC0gMSkpID09PSAwO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmV4dFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhbHVlIC0tO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDI7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA0O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gODtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDE2O1xyXG4gICAgdmFsdWUgKys7XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmVhcmVzdFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiBNYXRoLnBvdyggMiwgTWF0aC5yb3VuZCggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRoLkxOMiApICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXRoVXRpbDtcclxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mVHdvKHZhbCkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgucm91bmQoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKSk7XHJcbn1cclxuZnVuY3Rpb24gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGV4dHVyZSwgY2FudmFzKSB7XHJcbiAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgd2lkdGggPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLndpZHRoKTtcclxuICAgIHZhciBoZWlnaHQgPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLmhlaWdodCk7XHJcbiAgICBjYW52YXMgPSBjYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZHJhd0ltYWdlKHRleHR1cmUuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlMkRcclxuICogQGV4dGVuZHMgY2xheS5UZXh0dXJlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAuLi5cclxuICogICAgIHZhciBtYXQgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAqICAgICAgICAgc2hhZGVyOiBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5waG9uZycsICdkaWZmdXNlTWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGRpZmZ1c2VNYXAgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgIGRpZmZ1c2VNYXAubG9hZCgnYXNzZXRzL3RleHR1cmVzL2RpZmZ1c2UuanBnJyk7XHJcbiAqICAgICBtYXQuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGRpZmZ1c2VNYXAuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGRpZmZ1c2UgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlMkQgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUyRCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIG1hcmsgZGlydHkgd2hlbiBhc3NpZ25lZC5cclxuICAgICAgICBpbWFnZTogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlIGlzIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7P1VpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiAgICAgW3tcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAwLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIHtcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAxLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIC4uLi5dXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb252ZXJ0VG9QT1Q6IGZhbHNlXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlMkQnLFxyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRvIHBvdCBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIGltYWdlL2NhbnZhcy92aWRlbyBlbGVtZW50LlxyXG4gICAgICAgIHZhciBjb252ZXJ0VG9QT1QgPSAhISh0aGlzLmNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICAmJiAhdGhpcy5taXBtYXBzLmxlbmd0aCAmJiB0aGlzLmltYWdlXHJcbiAgICAgICAgICAgICYmICh0aGlzLndyYXBTID09PSBUZXh0dXJlLlJFUEVBVCB8fCB0aGlzLndyYXBUID09PSBUZXh0dXJlLlJFUEVBVClcclxuICAgICAgICAgICAgJiYgdGhpcy5OUE9UXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfUywgY29udmVydFRvUE9UID8gdGhpcy53cmFwUyA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFMoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfVCwgY29udmVydFRvUE9UID8gdGhpcy53cmFwVCA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1hZ0ZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWFnRmlsdGVyKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1pbkZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFXzJELCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHdpZHRoIC89IDI7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgLz0gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCB0aGlzLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgY29udmVydFRvUE9UKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAoIXRoaXMuTlBPVCB8fCBjb252ZXJ0VG9QT1QpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICBpZiAoZGF0YS5pbWFnZSkge1xyXG4gICAgICAgICAgICB2YXIgaW1nRGF0YSA9IGRhdGEuaW1hZ2U7XHJcbiAgICAgICAgICAgIGlmIChjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvdENhbnZhcyA9IGNvbnZlcnRUZXh0dXJlVG9Qb3dlck9mVHdvKHRoaXMsIHRoaXMuX3BvdENhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBpbWdEYXRhID0gdGhpcy5fcG90Q2FudmFzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGltZ0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gQ2FuIGJlIHVzZWQgYXMgYSBibGFuayB0ZXh0dXJlIHdoZW4gd3JpdGluZyByZW5kZXIgdG8gdGV4dHVyZShSVFQpXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGdsRm9ybWF0IDw9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFRcclxuICAgICAgICAgICAgICAgICYmIGdsRm9ybWF0ID49IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5jb21wcmVzc2VkVGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwsIGdsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBkYXRhLnBpeGVscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJcyBhIHJlbmRlciB0YXJnZXQgaWYgcGl4ZWxzIGlzIG51bGxcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVGV4dHVyZTJELnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKSAmJiBpc1Bvd2VyT2ZUd28odGhpcy5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aCA+IDAgJiYgdGhpcy5pbWFnZS5oZWlnaHQgPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKHNyYywgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTJEO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBtYXRoVXRpbCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbnZhciBpc1Bvd2VyT2ZUd28gPSBtYXRoVXRpbC5pc1Bvd2VyT2ZUd287XHJcblxyXG52YXIgdGFyZ2V0TGlzdCA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2Vudmlyb25tZW50TWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudk1hcCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBlbnZNYXAubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICBtYXQuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGVudk1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgc2t5IHRleHR1cmUgbG9hZGVkXHJcbiAqICAgICAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICogICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIH0pO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgVGV4dHVyZUN1YmUgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmVDdWJlIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIGN1YmVtYXAgc2hvdWxkIG5vdCBmbGlwWSBpbiBkZWZhdWx0LlxyXG4gICAgICAgIC8vIGZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG54XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBueVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB6XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnpcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbWFnZToge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YSBvZiBlYWNoIHNpZGUuIFdpbGwgYmUgaWdub3JlZCBpZiBpbWFnZXMgYXJlIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczoge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlQ3ViZScsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29tbW9uKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdmFyIGdsRm9ybWF0ID0gdGhpcy5mb3JtYXQ7XHJcbiAgICAgICAgdmFyIGdsVHlwZSA9IHRoaXMudHlwZTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX1dSQVBfUywgdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9ULCB0aGlzLmdldEF2YWlsYWJsZVdyYXBUKCkpO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5OUE9UICYmIHRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldExpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpbWcgPSBkYXRhLmltYWdlICYmIGRhdGEuaW1hZ2VbdGFyZ2V0XTtcclxuICAgICAgICAgICAgaWYgKGltZykge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzICYmIGRhdGEucGl4ZWxzW3RhcmdldF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlQ3ViZS5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAodGhpcy51c2VNaXBtYXAgJiYgIXRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgaXNQb3dlck9mVHdvIG1ldGhvZFxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHguaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc1Bvd2VyT2ZUd28odGhpcy53aWR0aClcclxuICAgICAgICAgICAgICAgICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubngpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB5KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueSlcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHopXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm56KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhISh0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWQ6IGZ1bmN0aW9uIChpbWFnZUxpc3QsIGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB1dGlsLmVhY2goaW1hZ2VMaXN0LCBmdW5jdGlvbiAoc3JjLCB0YXJnZXQpe1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICAgICAgaWYgKGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcgLS07XHJcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlW3RhcmdldF0gPSBpbWFnZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCB3aWR0aCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dpZHRoICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UucHguaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCBoZWlnaHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuZnVuY3Rpb24gaXNJbWFnZVJlbmRlcmFibGUoaW1hZ2UpIHtcclxuICAgIHJldHVybiBpbWFnZS53aWR0aCA+IDAgJiYgaW1hZ2UuaGVpZ2h0ID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZUN1YmU7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgUmVuZGVyYWJsZSA9IE5vZGUuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5SZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lkdlb21ldHJ5fVxyXG4gICAgICovXHJcbiAgICBnZW9tZXRyeTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1vZGU6IGdsZW51bS5UUklBTkdMRVMsXHJcblxyXG4gICAgX3JlbmRlckluZm86IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBfX3Byb2dyYW06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHcm91cCBvZiByZWNlaXZlZCBsaWdodC5cclxuICAgICAqL1xyXG4gICAgbGlnaHRHcm91cDogMCxcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIG9yZGVyLCBOb2RlcyB3aXRoIHNtYWxsZXIgdmFsdWUgcmVuZGVycyBiZWZvcmUgbm9kZXMgd2l0aCBsYXJnZXIgdmFsdWVzLlxyXG4gICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmVuZGVyT3JkZXI6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gbW9kZSBpcyBMSU5FUywgTElORV9TVFJJUCBvciBMSU5FX0xPT1BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIGxpbmVXaWR0aDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBjdWxsaW5nXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgY3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIG9mIHBvbHlnb24gd2lsbCBiZSBjdWxsZWQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkJBQ0t9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDS31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9jdWxsRmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3VsbEZhY2U6IGdsZW51bS5CQUNLLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgaXMgZnJvbnQgZmFjZS5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ1d9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkNDV31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9mcm9udEZhY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZyb250RmFjZTogZ2xlbnVtLkNDVyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBzb2Z0d2FyZSBmcnVzdHVtIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHJlY2VpdmVTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjYXN0U2hhZG93OiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaWdub3JlUGlja2luZzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQcmVaOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVHQnVmZmVyOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVE9ETyBTaGFkZXIgP1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlb21ldHJ5ICYmIHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC5zaGFkZXIgJiYgIXRoaXMuaW52aXNpYmxlXHJcbiAgICAgICAgICAgICYmIHRoaXMuZ2VvbWV0cnkudmVydGV4Q291bnQgPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJlZm9yZSByZW5kZXIgaG9va1xyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBiZWZvcmVSZW5kZXI6IGZ1bmN0aW9uIChfZ2wpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAoX2dsLCByZW5kZXJTdGF0KSB7fSxcclxuXHJcbiAgICBnZXRCb3VuZGluZ0JveDogZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgb3V0ID0gTm9kZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3guY2FsbCh0aGlzLCBmaWx0ZXIsIG91dCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICBvdXQudW5pb24odGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHJlbmRlcmFibGVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5SZW5kZXJhYmxlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW1xyXG4gICAgICAgICAgICAnY2FzdFNoYWRvdycsICdyZWNlaXZlU2hhZG93JyxcclxuICAgICAgICAgICAgJ21vZGUnLCAnY3VsbGluZycsICdjdWxsRmFjZScsICdmcm9udEZhY2UnLFxyXG4gICAgICAgICAgICAnZnJ1c3R1bUN1bGxpbmcnLFxyXG4gICAgICAgICAgICAncmVuZGVyT3JkZXInLCAnbGluZVdpZHRoJyxcclxuICAgICAgICAgICAgJ2lnbm9yZVBpY2tpbmcnLCAnaWdub3JlUHJlWicsICdpZ25vcmVHQnVmZmVyJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSBub3QgdG8gb3ZlcndyaXRlIHRoZSBwcm90b3R5cGUgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlW25hbWVdICE9PSB0aGlzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZVtuYW1lXSA9IHRoaXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQkFDSyA9IGdsZW51bS5CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkNXID0gZ2xlbnVtLkNXO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlbmRlcmFibGU7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWVzaFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlJlbmRlcmFibGVcclxuICovXHJcbnZhciBNZXNoID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5Lk1lc2gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB3aGVuIGl0IGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ta2VsZXRvbn1cclxuICAgICAqL1xyXG4gICAgc2tlbGV0b246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEpvaW50cyBpbmRpY2VzIE1lc2hlcyBjYW4gc2hhcmUgdGhlIG9uZSBza2VsZXRvbiBpbnN0YW5jZSBhbmQgZWFjaCBtZXNoIGNhbiB1c2Ugb25lIHBhcnQgb2Ygam9pbnRzLiBKb2ludHMgaW5kaWNlcyBpbmRpY2F0ZSB0aGUgaW5kZXggb2Ygam9pbnQgaW4gdGhlIHNrZWxldG9uIGluc3RhbmNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgKi9cclxuICAgIGpvaW50czogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHN0b3JlIHRoZSBza2luIG1hdHJpY2VzIGluIHZlcnRleCB0ZXh0dXJlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbH1cclxuICAgICAqL1xyXG4gICAgdXNlU2tpbk1hdHJpY2VzVGV4dHVyZTogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5qb2ludHMpIHtcclxuICAgICAgICB0aGlzLmpvaW50cyA9IFtdO1xyXG4gICAgfVxyXG59LCB7XHJcblxyXG4gICAgaXNTa2lubmVkTWVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhISh0aGlzLnNrZWxldG9uICYmIHRoaXMuam9pbnRzICYmIHRoaXMuam9pbnRzLmxlbmd0aCA+IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtZXNoID0gUmVuZGVyYWJsZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBtZXNoLnNrZWxldG9uID0gdGhpcy5za2VsZXRvbjtcclxuICAgICAgICBpZiAodGhpcy5qb2ludHMpIHtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSB0aGlzLmpvaW50cy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vLyBFbnVtc1xyXG5NZXNoLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbk1lc2guTElORVMgPSBnbGVudW0uTElORVM7XHJcbk1lc2guTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuTWVzaC5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbk1lc2guVFJJQU5HTEVTID0gZ2xlbnVtLlRSSUFOR0xFUztcclxuTWVzaC5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG5cclxuTWVzaC5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbk1lc2guRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbk1lc2guRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XHJcbk1lc2guQ1cgPSBnbGVudW0uQ1c7XHJcbk1lc2guQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc2g7XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSAnLi4vQ2FtZXJhJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmVcclxuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcclxuICovXHJcbnZhciBQZXJzcGVjdGl2ZSA9IENhbWVyYS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gZGVncmVlc1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZm92OiA1MCxcclxuICAgIC8qKlxyXG4gICAgICogQXNwZWN0IHJhdGlvLCB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGggLyBoZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFzcGVjdDogMSxcclxuICAgIC8qKlxyXG4gICAgICogTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogMC4xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMjAwMFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJhZCA9IHRoaXMuZm92IC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgucGVyc3BlY3RpdmUocmFkLCB0aGlzLmFzcGVjdCwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XHJcbiAgICB9LFxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciByYWQgPSBNYXRoLmF0YW4oMSAvIG1bNV0pICogMjtcclxuICAgICAgICB0aGlzLmZvdiA9IHJhZCAvIE1hdGguUEkgKiAxODA7XHJcbiAgICAgICAgdGhpcy5hc3BlY3QgPSBtWzVdIC8gbVswXTtcclxuICAgICAgICB0aGlzLm5lYXIgPSBtWzE0XSAvIChtWzEwXSAtIDEpO1xyXG4gICAgICAgIHRoaXMuZmFyID0gbVsxNF0gLyAobVsxMF0gKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLlBlcnNwZWN0aXZlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IENhbWVyYS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gdGhpcy5mb3Y7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMuYXNwZWN0O1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQZXJzcGVjdGl2ZTtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY1xyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIE9ydGhvZ3JhcGhpYyA9IENhbWVyYS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlZnQ6IC0xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByaWdodDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3R0b206IC0xXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm9ydGhvKHRoaXMubGVmdCwgdGhpcy5yaWdodCwgdGhpcy5ib3R0b20sIHRoaXMudG9wLCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHRoaXMubGVmdCA9ICgtMSAtIG1bMTJdKSAvIG1bMF07XHJcbiAgICAgICAgdGhpcy5yaWdodCA9ICgxIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnRvcCA9ICgxIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLmJvdHRvbSA9ICgtMSAtIG1bMTNdKSAvIG1bNV07XHJcbiAgICAgICAgdGhpcy5uZWFyID0gLSgtMSAtIG1bMTRdKSAvIG1bMTBdO1xyXG4gICAgICAgIHRoaXMuZmFyID0gLSgxIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5sZWZ0ID0gdGhpcy5sZWZ0O1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IHRoaXMucmlnaHQ7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSB0aGlzLnRvcDtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gdGhpcy5ib3R0b207XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3J0aG9ncmFwaGljO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmIGRlZmluZWQoUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRCkgfHwgZGVmaW5lZChOT1JNQUxNQVBfRU5BQkxFRClcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChBT01BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkMjtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X3NoX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9jdWJlbWFwX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5wb2ludF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuZGlyZWN0aW9uYWxfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgU1BPVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuc3BvdF9saWdodFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBzdGFuZGFyZFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQyIDogVEVYQ09PUkRfMTtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsudmFyeWluZ1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiB2ZWMzIHNraW5uZWRUYW5nZW50ID0gdGFuZ2VudC54eXo7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiB2X1RhbmdlbnQgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZFRhbmdlbnQsIDAuMCkpLnh5eik7XFxuIHZfQml0YW5nZW50ID0gbm9ybWFsaXplKGNyb3NzKHZfTm9ybWFsLCB2X1RhbmdlbnQpICogdGFuZ2VudC53KTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuIHZfVGV4Y29vcmQyID0gdGV4Y29vcmQyO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5XFxuI2RlZmluZSBHTE9TU0lORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgUk9VR0hORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgTUVUQUxORVNTX0NIQU5ORUwgMVxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxuI2lmZGVmIE5PUk1BTE1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbm9ybWFsU2NhbGU6IDEuMDtcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MgOiAwLjU7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4gI2VuZGlmXFxuI2Vsc2VcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M6IDAuNTtcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdsb3NzaW5lc3NNYXA7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBvY2NsdXNpb25NYXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWluO1xcbnVuaWZvcm0gdmVjMyBlbnZpcm9ubWVudEJveE1heDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIEJSREZMT09LVVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVNSVNTSVZFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3Nhb01hcDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQgOiBWSUVXUE9SVDtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xcbnVuaWZvcm0gZmxvYXQgYW9JbnRlbnNpdHk7XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcyA6IDAuMDtcXG4jZWxzZVxcbnVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yIDogWzAuMSwgMC4xLCAwLjFdO1xcbiNlbmRpZlxcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGVtaXNzaW9uSW50ZW5zaXR5OiAxO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxudW5pZm9ybSBmbG9hdCBtYXhNaXBtYXBMZXZlbDogNTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsubGlnaHRfaGVhZGVyXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuQGltcG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG5mbG9hdCBHX1NtaXRoKGZsb2F0IGcsIGZsb2F0IG5kdiwgZmxvYXQgbmRsKVxcbntcXG4gZmxvYXQgcm91Z2huZXNzID0gMS4wIC0gZztcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gbmR2IC8gKG5kdiAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBuZGwgLyAobmRsICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxuZmxvYXQgRF9QaG9uZyhmbG9hdCBnLCBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKFBJICogdG1wICogdG1wKTtcXG59XFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4T2NjbHVzaW9uU2NhbGUgOiAwLjAyO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNYXhMYXllcnMgOiAyMDtcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4TWluTGF5ZXJzIDogNTtcXG51bmlmb3JtIHNhbXBsZXIyRCBwYXJhbGxheE9jY2x1c2lvbk1hcDtcXG5tYXQzIHRyYW5zcG9zZShpbiBtYXQzIGluTWF0KVxcbntcXG4gdmVjMyBpMCA9IGluTWF0WzBdO1xcbiB2ZWMzIGkxID0gaW5NYXRbMV07XFxuIHZlYzMgaTIgPSBpbk1hdFsyXTtcXG4gcmV0dXJuIG1hdDMoXFxuIHZlYzMoaTAueCwgaTEueCwgaTIueCksXFxuIHZlYzMoaTAueSwgaTEueSwgaTIueSksXFxuIHZlYzMoaTAueiwgaTEueiwgaTIueilcXG4gKTtcXG59XFxudmVjMiBwYXJhbGxheFV2KHZlYzIgdXYsIHZlYzMgdmlld0RpcilcXG57XFxuIGZsb2F0IG51bUxheWVycyA9IG1peChwYXJhbGxheE1heExheWVycywgcGFyYWxsYXhNaW5MYXllcnMsIGFicyhkb3QodmVjMygwLjAsIDAuMCwgMS4wKSwgdmlld0RpcikpKTtcXG4gZmxvYXQgbGF5ZXJIZWlnaHQgPSAxLjAgLyBudW1MYXllcnM7XFxuIGZsb2F0IGN1ckxheWVySGVpZ2h0ID0gMC4wO1xcbiB2ZWMyIGRlbHRhVXYgPSB2aWV3RGlyLnh5ICogcGFyYWxsYXhPY2NsdXNpb25TY2FsZSAvICh2aWV3RGlyLnogKiBudW1MYXllcnMpO1xcbiB2ZWMyIGN1clV2ID0gdXY7XFxuIGZsb2F0IGhlaWdodCA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgY3VyVXYpLnI7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgMzA7IGkrKykge1xcbiBjdXJMYXllckhlaWdodCArPSBsYXllckhlaWdodDtcXG4gY3VyVXYgLT0gZGVsdGFVdjtcXG4gaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gaWYgKGhlaWdodCA8IGN1ckxheWVySGVpZ2h0KSB7XFxuIGJyZWFrO1xcbiB9XFxuIH1cXG4gdmVjMiBwcmV2VXYgPSBjdXJVdiArIGRlbHRhVXY7XFxuIGZsb2F0IG5leHQgPSBoZWlnaHQgLSBjdXJMYXllckhlaWdodDtcXG4gZmxvYXQgcHJldiA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgcHJldlV2KS5yIC0gY3VyTGF5ZXJIZWlnaHQgKyBsYXllckhlaWdodDtcXG4gcmV0dXJuIG1peChjdXJVdiwgcHJldlV2LCBuZXh0IC8gKG5leHQgLSBwcmV2KSk7XFxufVxcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBhbGJlZG9Db2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGFsYmVkb0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGFsYmVkb0NvbG9yID0gc1JHQlRvTGluZWFyKGFsYmVkb0NvbG9yKTtcXG4jZW5kaWZcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3MgLSB2X1dvcmxkUG9zaXRpb24pO1xcbiB2ZWMyIHV2ID0gdl9UZXhjb29yZDtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIHV2ID0gcGFyYWxsYXhVdih2X1RleGNvb3JkLCBub3JtYWxpemUodHJhbnNwb3NlKHRibikgKiAtVikpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB1dik7XFxuICNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuICNlbmRpZlxcbiBhbGJlZG9Db2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiAjaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiBhbGJlZG9Db2xvci5hICo9IHRleGVsLmE7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUVUQUxORVNTXFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBtMiA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHV2KVtNRVRBTE5FU1NfQ0hBTk5FTF07XFxuIG0gPSBjbGFtcChtMiArIChtIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4gdmVjMyBiYXNlQ29sb3IgPSBhbGJlZG9Db2xvci5yZ2I7XFxuIGFsYmVkb0NvbG9yLnJnYiA9IGJhc2VDb2xvciAqICgxLjAgLSBtKTtcXG4gdmVjMyBzcGVjID0gbWl4KHZlYzMoMC4wNCksIGJhc2VDb2xvciwgbSk7XFxuI2Vsc2VcXG4gdmVjMyBzcGVjID0gc3BlY3VsYXJDb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1JPVUdITkVTU1xcbiBmbG9hdCBnID0gY2xhbXAoMS4wIC0gcm91Z2huZXNzLCAwLjAsIDEuMCk7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IDEuMCAtIHRleHR1cmUyRChyb3VnaG5lc3NNYXAsIHV2KVtST1VHSE5FU1NfQ0hBTk5FTF07XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4jZWxzZVxcbiBmbG9hdCBnID0gZ2xvc3NpbmVzcztcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IHRleHR1cmUyRChnbG9zc2luZXNzTWFwLCB1dilbR0xPU1NJTkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxuIHNwZWMgKj0gc1JHQlRvTGluZWFyKHRleHR1cmUyRChzcGVjdWxhck1hcCwgdXYpKS5yZ2I7XFxuI2VuZGlmXFxuIHZlYzMgTiA9IHZfTm9ybWFsO1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG4gaWYgKGRvdChOLCBWKSA8IDAuMCkge1xcbiBOID0gLU47XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHV2KS54eXo7XFxuIGlmIChkb3Qobm9ybWFsVGV4ZWwsIG5vcm1hbFRleGVsKSA+IDAuMCkgeyBOID0gKG5vcm1hbFRleGVsICogMi4wIC0gMS4wKTtcXG4gTiA9IG5vcm1hbGl6ZShOICogdmVjMyhub3JtYWxTY2FsZSwgbm9ybWFsU2NhbGUsIDEuMCkpO1xcbiB0Ym5bMV0gPSAtdGJuWzFdO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBkaWZmdXNlVGVybSA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuIHZlYzMgc3BlY3VsYXJUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIHZlYzMgZnJlc25lbFRlcm0gPSBGX1NjaGxpY2sobmR2LCBzcGVjKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZVRlcm0gKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCBOKSAqIGFtYmllbnRTSExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNQb2ludFtQT0lOVF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gdmVjMyBsYyA9IHBvaW50TGlnaHRDb2xvcltfaWR4X107XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW19pZHhfXTtcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1BvaW50W19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuIGRpZmZ1c2VUZXJtICs9IGxpO1xcbiBzcGVjdWxhclRlcm0gKz0gbGkgKiBmcmVzbmVsVGVybSAqIERfUGhvbmcoZywgbmRoKTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzRGlyW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzRGlyKTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW19pZHhfXSk7XFxuIHZlYzMgbGMgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogbmRsICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IHNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoc3BvdExpZ2h0RGlyZWN0aW9uW2ldKTtcXG4gdmVjMyBsYyA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiBmbG9hdCByYW5nZSA9IHNwb3RMaWdodFJhbmdlW2ldO1xcbiBmbG9hdCBhID0gc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGZhbGxvZmZGYWN0b3IgPSBzcG90TGlnaHRGYWxsb2ZmRmFjdG9yW2ldO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBMKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyhiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiAoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNTcG90W2ldO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIGF0dGVudWF0aW9uICogKDEuMCAtIGZhbGxvZmYpICogc2hhZG93Q29udHJpYiAqIG5kbDtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzQgb3V0Q29sb3IgPSBhbGJlZG9Db2xvcjtcXG4gb3V0Q29sb3IucmdiICo9IG1heChkaWZmdXNlVGVybSwgdmVjMygwLjApKTtcXG4gb3V0Q29sb3IucmdiICs9IG1heChzcGVjdWxhclRlcm0sIHZlYzMoMC4wKSk7XFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gZmxvYXQgcm91Z2gyID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzMiA9IHJvdWdoMiAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0yID0gdGV4dHVyZTJEKGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwWzBdLCB2ZWMyKHJvdWdoMiwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0MiA9IHNwZWMgKiBicmRmUGFyYW0yLnggKyBicmRmUGFyYW0yLnk7XFxuIHZlYzMgZW52VGV4ZWwyO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMLCBiaWFzMiksIDguMTIpO1xcbiAjZWxzZVxcbiBlbnZUZXhlbDIgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlKGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW19pZHhfXSwgTCksIDguMTIpO1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGFtYmllbnRDdWJlbWFwTGlnaHRDb2xvcltfaWR4X10gKiBlbnZUZXhlbDIgKiBlbnZXZWlnaHQyO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9FTkFCTEVEXFxuIHZlYzMgZW52V2VpZ2h0ID0gZyAqIGZyZXNuZWxUZXJtO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gI2lmZGVmIFBBUkFMTEFYX0NPUlJFQ1RFRFxcbiBMID0gcGFyYWxsYXhDb3JyZWN0KEwsIHZfV29ybGRQb3NpdGlvbiwgZW52aXJvbm1lbnRCb3hNaW4sIGVudmlyb25tZW50Qm94TWF4KTtcXG4jZW5kaWZcXG4gI2lmZGVmIEVOVklST05NRU5UTUFQX1BSRUZJTFRFUlxcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGcsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogbWF4TWlwbWFwTGV2ZWw7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmVMb2RFWFQoZW52aXJvbm1lbnRNYXAsIEwsIGJpYXMpKS5yZ2I7XFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2I7XFxuICNlbmRpZlxcbiAjaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxuIHZlYzIgYnJkZlBhcmFtID0gdGV4dHVyZTJEKGJyZGZMb29rdXAsIHZlYzIocm91Z2gsIG5kdikpLnh5O1xcbiBlbnZXZWlnaHQgPSBzcGVjICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gI2VuZGlmXFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSB0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkueHl6O1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGVudlRleGVsICogZW52V2VpZ2h0O1xcbiNlbmRpZlxcbiBmbG9hdCBhb0ZhY3RvciA9IDEuMDtcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKHRleHR1cmUyRChzc2FvTWFwLCAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuencpLnIsIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbiBhb0ZhY3RvciA9IG1pbigxLjAgLSBjbGFtcCgoMS4wIC0gdGV4dHVyZTJEKGFvTWFwLCB2X1RleGNvb3JkMikucikgKiBhb0ludGVuc2l0eSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuI2lmZGVmIE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQob2NjbHVzaW9uTWFwLCB2X1RleGNvb3JkKS5yKSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiAqPSBhb0ZhY3RvcjtcXG4gdmVjMyBsRW1pc3Npb24gPSBlbWlzc2lvbjtcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbiBsRW1pc3Npb24gKj0gdGV4dHVyZTJEKGVtaXNzaXZlTWFwLCB1dikucmdiO1xcbiNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gbEVtaXNzaW9uICogZW1pc3Npb25JbnRlbnNpdHk7XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKG91dENvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIG91dENvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhvdXRDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBvdXRDb2xvciA9IGxpbmVhclRvc1JHQihvdXRDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihvdXRDb2xvcik7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmRNUi52ZXJ0ZXhcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50XFxuI2RlZmluZSBVU0VfTUVUQUxORVNTXFxuI2RlZmluZSBVU0VfUk9VR0hORVNTXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcblxyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NoYWRlci9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuXHJcbi8vIEltcG9ydCBzdGFuZGFyZCBzaGFkZXJcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5cclxudmFyIFRFWFRVUkVfUFJPUEVSVElFUyA9IFsnZGlmZnVzZU1hcCcsICdub3JtYWxNYXAnLCAncm91Z2huZXNzTWFwJywgJ21ldGFsbmVzc01hcCcsICdlbWlzc2l2ZU1hcCcsICdlbnZpcm9ubWVudE1hcCcsICdicmRmTG9va3VwJywgJ3NzYW9NYXAnLCAnYW9NYXAnXTtcclxudmFyIFNJTVBMRV9QUk9QRVJUSUVTID0gWydjb2xvcicsICdlbWlzc2lvbicsICdlbWlzc2lvbkludGVuc2l0eScsICdhbHBoYScsICdyb3VnaG5lc3MnLCAnbWV0YWxuZXNzJywgJ3V2UmVwZWF0JywgJ3V2T2Zmc2V0JywgJ2FvSW50ZW5zaXR5JywgJ2FscGhhQ3V0b2ZmJywgJ25vcm1hbFNjYWxlJ107XHJcbnZhciBQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIgPSBbJ2xpbmVhcicsICdlbmNvZGVSR0JNJywgJ2RlY29kZVJHQk0nLCAnZG91YmxlU2lkZWQnLCAnYWxwaGFUZXN0JywgJ3JvdWdobmVzc0NoYW5uZWwnLCAnbWV0YWxuZXNzQ2hhbm5lbCcsICdlbnZpcm9ubWVudE1hcFByZWZpbHRlcmVkJ107XHJcblxyXG52YXIgTlVNX0RFRklORV9NQVAgPSB7XHJcbiAgICAncm91Z2huZXNzQ2hhbm5lbCc6ICdST1VHSE5FU1NfQ0hBTk5FTCcsXHJcbiAgICAnbWV0YWxuZXNzQ2hhbm5lbCc6ICdNRVRBTE5FU1NfQ0hBTk5FTCdcclxufTtcclxudmFyIEJPT0xfREVGSU5FX01BUCA9IHtcclxuICAgICdsaW5lYXInOiAnU1JHQl9ERUNPREUnLFxyXG4gICAgJ2VuY29kZVJHQk0nOiAnUkdCTV9FTkNPREUnLFxyXG4gICAgJ2RlY29kZVJHQk0nOiAnUkdCTV9ERUNPREUnLFxyXG4gICAgJ2RvdWJsZVNpZGVkJzogJ0RPVUJMRV9TSURFRCcsXHJcbiAgICAnYWxwaGFUZXN0JzogJ0FMUEhBX1RFU1QnLFxyXG4gICAgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnOiAnRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSJ1xyXG59O1xyXG5cclxuXHJcbnZhciBzdGFuZGFyZFNoYWRlcjtcclxuLyoqXHJcbiAqIFN0YW5kYXJkIG1hdGVyaWFsIHdpdGhvdXQgY3VzdG9tIHNoYWRlci5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU3RhbmRhcmRNYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkJhc2VcclxuICogQGV4YW1wbGVcclxuICogdmFyIG1hdCA9IG5ldyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gKiAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuICogICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VUZXh0dXJlXHJcbiAqIH0pO1xyXG4gKiBtYXQucm91Z2huZXNzID0gMTtcclxuICovXHJcbnZhciBTdGFuZGFyZE1hdGVyaWFsID0gTWF0ZXJpYWwuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghc3RhbmRhcmRTaGFkZXIpIHtcclxuICAgICAgICBzdGFuZGFyZFNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnQnKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwjICovIHtcclxuICAgICAgICBzaGFkZXI6IHN0YW5kYXJkU2hhZGVyXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRpb24pO1xyXG4gICAgLy8gRXh0ZW5kIGFmdGVyIHNoYWRlciBpcyBjcmVhdGVkLlxyXG4gICAgdXRpbC5kZWZhdWx0cyh0aGlzLCAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8gIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzEsIDEsIDFdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFswLCAwLCAwXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uOiBbMCwgMCwgMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdWdobmVzczogMC41LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3M6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYVRlc3Q6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDdXRvZmYgdGhyZXNob2xkIGZvciBhbHBoYSB0ZXN0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYUN1dG9mZjogMC45LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2FsYXIgbXVsdGlwbGllciBhcHBsaWVkIHRvIGVhY2ggbm9ybWFsIHZlY3RvciBvZiBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBjb25zaWRlcmVkIG9ubHkgaWYgYSBub3JtYWwgdGV4dHVyZSBpcyBzcGVjaWZpZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsU2NhbGU6IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gVE9ETyBNdXN0IGRpc2FibGUgY3VsbGluZy5cclxuICAgICAgICBkb3VibGVTaWRlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkaWZmdXNlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzTWFwOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbWlzc2l2ZU1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50Qm94OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJSREYgTG9va3VwIGlzIGdlbmVyYXRlZCBieSBjbGF5LnV0aWwuY3ViZW1hcC5pbnRlZ3JhdGVCcmRmXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJyZGZMb29rdXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzc2FvTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dlJlcGVhdDogWzEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXZPZmZzZXQ6IFswLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9JbnRlbnNpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUHJlZmlsdGVyZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsaW5lYXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVjb2RlUkdCTTogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzc0NoYW5uZWw6IDFcclxuICAgIH0pO1xyXG59LCB7XHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxbcHJvcE5hbWVdID0gdGhpc1twcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICBTSU1QTEVfUFJPUEVSVElFUy5jb25jYXQoUFJPUEVSVElFU19DSEFOR0VfU0hBREVSKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuU0lNUExFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgcHJvcE5hbWUsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHByb3BOYW1lKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShwcm9wTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcblRFWFRVUkVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuUFJPUEVSVElFU19DSEFOR0VfU0hBREVSLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICB2YXIgcHJpdmF0ZUtleSA9ICdfJyArIHByb3BOYW1lO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1twcml2YXRlS2V5XTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbcHJpdmF0ZUtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHByb3BOYW1lIGluIE5VTV9ERUZJTkVfTUFQKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lTmFtZSA9IE5VTV9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gQk9PTF9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID8gdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSkgOiB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAnZW52aXJvbm1lbnRCb3gnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW52Qm94ID0gdGhpcy5fZW52aXJvbm1lbnRCb3g7XHJcbiAgICAgICAgaWYgKGVudkJveCkge1xyXG4gICAgICAgICAgICBlbnZCb3gubWluLnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1pbicpKTtcclxuICAgICAgICAgICAgZW52Qm94Lm1heC5zZXRBcnJheSh0aGlzLmdldCgnZW52aXJvbm1lbnRCb3hNYXgnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbnZCb3g7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fZW52aXJvbm1lbnRCb3ggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMgfHwge307XHJcbiAgICAgICAgdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWluJ10gPSB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSB8fCB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNYXgnXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBUT0RPIENhbid0IGRldGVjdCBvcGVyYXRpb24gbGlrZSBib3gubWluID0gbmV3IFZlY3RvcigpXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNaW4nLCB2YWx1ZS5taW4uYXJyYXkpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50Qm94TWF4JywgdmFsdWUubWF4LmFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCAnUEFSQUxMQVhfQ09SUkVDVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3RhbmRhcmRNYXRlcmlhbDtcclxuIiwiaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIF9saWJyYXJ5ID0ge307XHJcblxyXG5mdW5jdGlvbiBTaGFkZXJMaWJyYXJ5ICgpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufVxyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgdmFyIGtleSA9IG5hbWU7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Bvb2xba2V5XSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb29sW2tleV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgc291cmNlID0gX2xpYnJhcnlbbmFtZV07XHJcbiAgICAgICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCInICsgJyBpcyBub3QgaW4gdGhlIGxpYnJhcnknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihzb3VyY2UudmVydGV4LCBzb3VyY2UuZnJhZ21lbnQpO1xyXG4gICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IHNoYWRlcjtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHRlbXBsYXRlKG5hbWUsIHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIF9saWJyYXJ5W25hbWVdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxufVxyXG5cclxudmFyIGRlZmF1bHRMaWJyYXJ5ID0gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuXHJcbi8qKlxyXG4gKiAjIyMgQnVpbGluIHNoYWRlcnNcclxuICogKyBjbGF5LnN0YW5kYXJkXHJcbiAqICsgY2xheS5iYXNpY1xyXG4gKiArIGNsYXkubGFtYmVydFxyXG4gKiArIGNsYXkud2lyZWZyYW1lXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgc2hhZGVyIGxpYnJhcnkuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUxpYnJhcnk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaGFkZXIgZnJvbSBkZWZhdWx0IGxpYnJhcnkuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICAgICBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5zdGFuZGFyZCcpXHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0TGlicmFyeS5nZXQuYXBwbHkoZGVmYXVsdExpYnJhcnksIGFyZ3VtZW50cyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHZlcnRleCAtIFZlcnRleCBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBmcmFnbWVudCAtIEZyYWdtZW50IHNoYWRlciBjb2RlXHJcbiAgICAgKi9cclxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmNsZWFyKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Kb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEpvaW50ID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5Kb2ludCMgKi9cclxue1xyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTMjaXNzdWVjb21tZW50LTI5MjE2NTc2XHJcbiAgICAvKipcclxuICAgICAqIEpvaW50IG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG5hbWU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGluZGV4OiAtMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgYXR0YWNoZWQgdG9cclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIG5vZGU6IG51bGxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBKb2ludDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi9Kb2ludCc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9nbG1hdHJpeC9xdWF0JztcclxuXHJcblxyXG52YXIgdG1wQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxudmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNrZWxldG9uXHJcbiAqL1xyXG52YXIgU2tlbGV0b24gPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNrZWxldG9uIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVsYXRpdmUgcm9vdCBub2RlIHRoYXQgbm90IGFmZmVjdCB0cmFuc2Zvcm0gb2Ygam9pbnQuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZWxhdGl2ZVJvb3ROb2RlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGpvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5Kb2ludD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgam9pbnRzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogYm91bmRpbmcgYm94IHdpdGggYm91bmQgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYm91bmRpbmdCb3g6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIC8vIE1hdHJpeCB0byBqb2ludCBzcGFjZSAocmVsYXRpdmUgdG8gcm9vdCBqb2ludClcclxuICAgICAgICBfaW52QmluZFBvc2VNYXRyaWNlc0FycmF5OiBudWxsLFxyXG5cclxuICAgICAgICAvLyBVc2Ugc3ViYXJyYXkgaW5zdGVhZCBvZiBjb3B5IGJhY2sgZWFjaCB0aW1lIGNvbXB1dGluZyBtYXRyaXhcclxuICAgICAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9zdWJhcnJheS12cy1jb3B5LWZvci1hcnJheS10cmFuc2Zvcm0vNVxyXG4gICAgICAgIF9qb2ludE1hdHJpY2VzU3ViQXJyYXlzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gam9pbnRNYXRyaXggKiBjdXJyZW50UG9zZU1hdHJpeFxyXG4gICAgICAgIC8vIHdvcmxkVHJhbnNmb3JtIGlzIHJlbGF0aXZlIHRvIHRoZSByb290IGJvbmVcclxuICAgICAgICAvLyBzdGlsbCBpbiBtb2RlbCBzcGFjZSBub3Qgd29ybGQgc3BhY2VcclxuICAgICAgICBfc2tpbk1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIF9za2luTWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICBfc3ViU2tpbk1hdHJpY2VzQXJyYXk6IHt9XHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2tlbGV0b24ucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIHNraW5uaW5nIGNsaXAgYW5kIGNyZWF0ZSBhIG1hcCBiZXR3ZWVuIGNsaXAgYW5kIHNrZWxldG9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFttYXBSdWxlXSBNYXAgYmV0d2VlbiBqb2ludCBuYW1lIGluIHNrZWxldG9uIGFuZCBqb2ludCBuYW1lIGluIGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXAsIG1hcFJ1bGUpIHtcclxuICAgICAgICAvLyBDbGlwIGhhdmUgYmVlbiBleGlzdHMgaW5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTWFwIHRoZSBqb2ludCBpbmRleCBpbiBza2VsZXRvbiB0byBqb2ludCBwb3NlIGluZGV4IGluIGNsaXBcclxuICAgICAgICB2YXIgbWFwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbWFwc1tpXSA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDcmVhdGUgYXZhdGFyXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tqXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50TmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwUnVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50TmFtZSA9IG1hcFJ1bGVbam9pbnROYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0cmFjay5uYW1lID09PSBqb2ludE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXBzW2pdID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2xpcHMucHVzaCh7XHJcbiAgICAgICAgICAgIG1hcHM6IG1hcHMsXHJcbiAgICAgICAgICAgIGNsaXA6IGNsaXBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzLmxlbmd0aCAtIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5Ta2lubmluZ0NsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gLTE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpcHNbaV0uY2xpcCA9PT0gY2xpcCkge1xyXG4gICAgICAgICAgICAgICAgaWR4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjbGlwIGJ5IGluZGV4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGluZGV4XHJcbiAgICAgKi9cclxuICAgIGdldENsaXA6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGlwc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzW2luZGV4XS5jbGlwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldENsaXBOdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBqb2ludCBtYXRyaWNlcyBmcm9tIG5vZGUgdHJhbnNmb3JtXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRNYXRyaWNlczogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIG00ID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShtNCwgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtNCwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpICogMTY7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXlbb2Zmc2V0ICsgal0gPSBtNFtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIGVhY2ggam9pbnQgYm91bmQgdG8gZ2VvbWV0cnkuXHJcbiAgICAgKiBBU1NVTUUgc2tlbGV0b24gYW5kIGdlb21ldHJ5IGpvaW50cyBhcmUgbWF0Y2hlZC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRzQm91bmRpbmdCb3hlczogZnVuY3Rpb24gKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbkF0dHIgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBqb2ludEF0dHIgPSBhdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgIHZhciB3ZWlnaHRBdHRyID0gYXR0cmlidXRlcy53ZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2ldID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0uX191cGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdnR4Sm9pbnQgPSBbXTtcclxuICAgICAgICB2YXIgdnR4UG9zID0gW107XHJcbiAgICAgICAgdmFyIHZ0eFdlaWdodCA9IFtdO1xyXG4gICAgICAgIHZhciBtYXhKb2ludElkeCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tZXRyeS52ZXJ0ZXhDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgdnR4Sm9pbnQpO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgIHdlaWdodEF0dHIuZ2V0KGksIHZ0eFdlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDQ7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZ0eFdlaWdodFtrXSA+IDAuMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRJZHggPSB2dHhKb2ludFtrXTtcclxuICAgICAgICAgICAgICAgICAgICBtYXhKb2ludElkeCA9IE1hdGgubWF4KG1heEpvaW50SWR4LCBqb2ludElkeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0uX191cGRhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWluID0gdmVjMy5taW4obWluLCBtaW4sIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gdmVjMy5tYXgobWF4LCBtYXgsIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2pvaW50c0JvdW5kaW5nQm94ZXMgPSBqb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgIGlmIChtYXhKb2ludElkeCA8IHRoaXMuam9pbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSBqb2ludHMgYW5kIHNrZWxldG9uIGpvaW50cyBkb25cXCd0IG1hdGNoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRKb2ludE1hdHJpY2VzQXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBhcnI7XHJcbiAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFyci5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTWF0cmljZXNTdWJBcnJheXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB0aGlzLl9zZXRQb3NlKCk7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2ludE1hdHJpY2VzU3ViQXJyYXlzW2ldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldChJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gam9pbnRzQm91bmRpbmdCb3hlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChiYm94Ll9fdXBkYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmNvcHkoYmJveCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wTWF0NC5hcnJheSA9IHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCb3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybSh0bXBNYXQ0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC51bmlvbih0bXBCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlczogZnVuY3Rpb24gKG1lc2hJZCwgam9pbnRzKSB7XHJcbiAgICAgICAgdmFyIHN1YkFycmF5ID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXTtcclxuICAgICAgICBpZiAoIXN1YkFycmF5KSB7XHJcbiAgICAgICAgICAgIHN1YkFycmF5XHJcbiAgICAgICAgICAgICAgICA9IHRoaXMuX3N1YlNraW5NYXRyaWNlc0FycmF5W21lc2hJZF1cclxuICAgICAgICAgICAgICAgID0gbmV3IEZsb2F0MzJBcnJheShqb2ludHMubGVuZ3RoICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHN1YkFycmF5W2N1cnNvcisrXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5W2lkeCAqIDE2ICsgal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1YkFycmF5O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc2tpbk1hdHJpY2VzID0gdGhpcy5nZXRTdWJTa2luTWF0cmljZXMobWVzaElkLCBqb2ludHMpO1xyXG4gICAgICAgIHZhciBzaXplO1xyXG4gICAgICAgIHZhciBudW1Kb2ludHMgPSB0aGlzLmpvaW50cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG51bUpvaW50cyA+IDI1Nikge1xyXG4gICAgICAgICAgICBzaXplID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG51bUpvaW50cyA+IDY0KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSAzMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gMTYpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDE2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgPSB0aGlzLl9za2luTWF0cmljZXNUZXh0dXJlIHx8IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmUud2lkdGggPSBzaXplO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gc2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLnBpeGVscyB8fCB0ZXh0dXJlLnBpeGVscy5sZW5ndGggIT09IHNpemUgKiBzaXplICogNCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIHNpemUgKiA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMuc2V0KHNraW5NYXRyaWNlcyk7XHJcbiAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRQb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzWzBdKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcHNbMF0uY2xpcDtcclxuICAgICAgICAgICAgdmFyIG1hcHMgPSB0aGlzLl9jbGlwc1swXS5tYXBzO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gdGhpcy5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwc1tpXSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3NlID0gY2xpcC50cmFja3NbbWFwc1tpXV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTm90IHVwZGF0ZSBpZiB0aGVyZSBpcyBubyBkYXRhLlxyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBJZiBzeW5jIHBvc2UucG9zaXRpb24sIHBvc2Uucm90YXRpb24sIHBvc2Uuc2NhbGVcclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUucG9zaXRpb24uYXJyYXksIHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWF0LmNvcHkoam9pbnQubm9kZS5yb3RhdGlvbi5hcnJheSwgcG9zZS5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuY29weShqb2ludC5ub2RlLnNjYWxlLmFycmF5LCBwb3NlLnNjYWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnBvc2l0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnJvdGF0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnNjYWxlLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oKTtcclxuICAgICAgICBza2VsZXRvbi5uYW1lID0gdGhpcy5uYW1lO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdKb2ludCA9IG5ldyBKb2ludCgpO1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgIG5ld0pvaW50LmluZGV4ID0gam9pbnQuaW5kZXg7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gY2xvbmVkTm9kZXNNYXBbam9pbnQubm9kZS5fX3VpZF9fXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGZpbmQgbm9kZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBuZXdOb2RlIHx8IGpvaW50Lm5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb2ludC5ub2RlID0gam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2gobmV3Sm9pbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSkge1xyXG4gICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5Lmxlbmd0aDtcclxuICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24udXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNrZWxldG9uLl9qb2ludHNCb3VuZGluZ0JveGUgPSAodGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyB8fCBbXSkubWFwKGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYm94LmNsb25lKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gc2tlbGV0b247XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2tlbGV0b247XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnV0aWwucmFuZFxcbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiB1dikge1xcbiBjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XFxuIGhpZ2hwIGZsb2F0IGR0ID0gZG90KHV2Lnh5LCB2ZWMyKGEsYikpLCBzbiA9IG1vZChkdCwgMy4xNDE1OTI2NTM1ODk3OTMpO1xcbiByZXR1cm4gZnJhY3Qoc2luKHNuKSAqIGMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkZhY3RvciA6IDUuMDtcXG5mbG9hdCBsaWdodEF0dGVudWF0aW9uKGZsb2F0IGRpc3QsIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSAxLjA7XFxuIGF0dGVudWF0aW9uID0gZGlzdCpkaXN0LyhyYW5nZSpyYW5nZSsxLjApO1xcbiBmbG9hdCBhdHRfcyA9IGF0dGVudWF0aW9uRmFjdG9yO1xcbiBhdHRlbnVhdGlvbiA9IDEuMC8oYXR0ZW51YXRpb24qYXR0X3MrMS4wKTtcXG4gYXR0X3MgPSAxLjAvKGF0dF9zKzEuMCk7XFxuIGF0dGVudWF0aW9uID0gYXR0ZW51YXRpb24gLSBhdHRfcztcXG4gYXR0ZW51YXRpb24gLz0gMS4wIC0gYXR0X3M7XFxuIHJldHVybiBjbGFtcChhdHRlbnVhdGlvbiwgMC4wLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG4jaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiB2ZWMzIGQgPSBmd2lkdGgodl9CYXJ5Y2VudHJpYyk7XFxuIHZlYzMgYTMgPSBzbW9vdGhzdGVwKHZlYzMoMC4wKSwgZCAqIHdpZHRoLCB2X0JhcnljZW50cmljKTtcXG4gcmV0dXJuIG1pbihtaW4oYTMueCwgYTMueSksIGEzLnopO1xcbn1cXG4jZWxzZVxcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiByZXR1cm4gMS4wO1xcbn1cXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudmVjNCBlbmNvZGVGbG9hdChjb25zdCBpbiBmbG9hdCBkZXB0aClcXG57XFxuIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgyNTYuMCoyNTYuMCoyNTYuMCwgMjU2LjAqMjU2LjAsIDI1Ni4wLCAxLjApO1xcbiBjb25zdCB2ZWM0IGJpdF9tYXNrID0gdmVjNCgwLjAsIDEuMC8yNTYuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjApO1xcbiB2ZWM0IHJlcyA9IGZyYWN0KGRlcHRoICogYml0U2hpZnRzKTtcXG4gcmVzIC09IHJlcy54eHl6ICogYml0X21hc2s7XFxuIHJldHVybiByZXM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCBkZWNvZGVGbG9hdChjb25zdCBpbiB2ZWM0IGNvbG9yKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDEuMC8oMjU2LjAqMjU2LjAqMjU2LjApLCAxLjAvKDI1Ni4wKjI1Ni4wKSwgMS4wLzI1Ni4wLCAxLjApO1xcbiByZXR1cm4gZG90KGNvbG9yLCBiaXRTaGlmdHMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG52ZWMzIFJHQk1EZWNvZGUodmVjNCByZ2JtLCBmbG9hdCByYW5nZSkge1xcbiByZXR1cm4gcmFuZ2UgKiByZ2JtLnJnYiAqIHJnYm0uYTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLnJnYm1fZW5jb2RlXFxudmVjNCBSR0JNRW5jb2RlKHZlYzMgY29sb3IsIGZsb2F0IHJhbmdlKSB7XFxuIGlmIChkb3QoY29sb3IsIGNvbG9yKSA9PSAwLjApIHtcXG4gcmV0dXJuIHZlYzQoMC4wKTtcXG4gfVxcbiB2ZWM0IHJnYm07XFxuIGNvbG9yIC89IHJhbmdlO1xcbiByZ2JtLmEgPSBjbGFtcChtYXgobWF4KGNvbG9yLnIsIGNvbG9yLmcpLCBtYXgoY29sb3IuYiwgMWUtNikpLCAwLjAsIDEuMCk7XFxuIHJnYm0uYSA9IGNlaWwocmdibS5hICogMjU1LjApIC8gMjU1LjA7XFxuIHJnYm0ucmdiID0gY29sb3IgLyByZ2JtLmE7XFxuIHJldHVybiByZ2JtO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IGRlY29kZUhEUih2ZWM0IGNvbG9yKVxcbntcXG4jaWYgZGVmaW5lZChSR0JNX0RFQ09ERSkgfHwgZGVmaW5lZChSR0JNKVxcbiByZXR1cm4gdmVjNChSR0JNRGVjb2RlKGNvbG9yLCA4LjEyKSwgMS4wKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbnZlYzQgZW5jb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fRU5DT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiBSR0JNRW5jb2RlKGNvbG9yLnh5eiwgOC4xMik7XFxuI2Vsc2VcXG4gcmV0dXJuIGNvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzQgc1JHQlRvTGluZWFyKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKDAuMDUyMTMyNzAxNCksIHZlYzMoMi40KSksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjA0MDQ1KSkpKSwgdmFsdWUudyk7XFxufVxcbnZlYzQgbGluZWFyVG9zUkdCKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IsIHZlYzMoMC40MTY2NikpICogMS4wNTUgLSB2ZWMzKDAuMDU1KSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMobGVzc1RoYW5FcXVhbCh2YWx1ZS5yZ2IsIHZlYzMoMC4wMDMxMzA4KSkpKSwgdmFsdWUudyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFNLSU5OSU5HXFxuYXR0cmlidXRlIHZlYzMgd2VpZ2h0IDogV0VJR0hUO1xcbmF0dHJpYnV0ZSB2ZWM0IGpvaW50IDogSk9JTlQ7XFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBza2luTWF0cmljZXNUZXh0dXJlIDogaWdub3JlO1xcbnVuaWZvcm0gZmxvYXQgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemU6IGlnbm9yZTtcXG5tYXQ0IGdldFNraW5NYXRyaXgoc2FtcGxlcjJEIHRleCwgZmxvYXQgaWR4KSB7XFxuIGZsb2F0IGogPSBpZHggKiA0LjA7XFxuIGZsb2F0IHggPSBtb2Qoaiwgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiBmbG9hdCB5ID0gZmxvb3IoaiAvIHNraW5NYXRyaWNlc1RleHR1cmVTaXplKSArIDAuNTtcXG4gdmVjMiBzY2FsZSA9IHZlYzIoc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiByZXR1cm4gbWF0NChcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMC41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMS41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMi41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMy41LCB5KSAvIHNjYWxlKVxcbiApO1xcbn1cXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHNraW5NYXRyaWNlc1RleHR1cmUsIGlkeCk7XFxufVxcbiNlbHNlXFxudW5pZm9ybSBtYXQ0IHNraW5NYXRyaXhbSk9JTlRfQ09VTlRdIDogU0tJTl9NQVRSSVg7XFxubWF0NCBnZXRTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gc2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG5tYXQ0IHNraW5NYXRyaXhXUyA9IGdldFNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG5pZiAod2VpZ2h0LnkgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTtcXG59XFxuaWYgKHdlaWdodC56ID4gMWUtNClcXG57XFxuIHNraW5NYXRyaXhXUyArPSBnZXRTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7XFxufVxcbmZsb2F0IHdlaWdodFcgPSAxLjAtd2VpZ2h0Lngtd2VpZ2h0Lnktd2VpZ2h0Lno7XFxuaWYgKHdlaWdodFcgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbnZlYzMgcGFyYWxsYXhDb3JyZWN0KGluIHZlYzMgZGlyLCBpbiB2ZWMzIHBvcywgaW4gdmVjMyBib3hNaW4sIGluIHZlYzMgYm94TWF4KSB7XFxuIHZlYzMgZmlyc3QgPSAoYm94TWF4IC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBzZWNvbmQgPSAoYm94TWluIC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBmdXJ0aGVyID0gbWF4KGZpcnN0LCBzZWNvbmQpO1xcbiBmbG9hdCBkaXN0ID0gbWluKGZ1cnRoZXIueCwgbWluKGZ1cnRoZXIueSwgZnVydGhlci56KSk7XFxuIHZlYzMgZml4ZWRQb3MgPSBwb3MgKyBkaXIgKiBkaXN0O1xcbiB2ZWMzIGJveENlbnRlciA9IChib3hNYXggKyBib3hNaW4pICogMC41O1xcbiByZXR1cm4gbm9ybWFsaXplKGZpeGVkUG9zIC0gYm94Q2VudGVyKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZlYzQgY2xhbXBTYW1wbGUoY29uc3QgaW4gc2FtcGxlcjJEIHRleHR1cmUsIGNvbnN0IGluIHZlYzIgY29vcmQpXFxue1xcbiNpZmRlZiBTVEVSRU9cXG4gZmxvYXQgZXllID0gc3RlcCgwLjUsIGNvb3JkLngpICogMC41O1xcbiB2ZWMyIGNvb3JkQ2xhbXBlZCA9IGNsYW1wKGNvb3JkLCB2ZWMyKGV5ZSwgMC4wKSwgdmVjMigwLjUgKyBleWUsIDEuMCkpO1xcbiNlbHNlXFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoMC4wKSwgdmVjMigxLjApKTtcXG4jZW5kaWZcXG4gcmV0dXJuIHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZENsYW1wZWQpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuYmFzaWMudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiB2X0NvbG9yID0gYV9Db2xvcjtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5iYXNpYy5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkpO1xcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElGRlVTRU1BUF9BTFBIQV9BTFBIQSlcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXhlbC5hO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleGVsLnJnYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gaWYoIGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5sYW1iZXJ0LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNCggc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoICggd29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApICkueHl6ICk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICggd29ybGQgKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCkgKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQuZnJhZ21lbnRcXG4jZGVmaW5lIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGdsX0ZyYWdDb2xvciAqPSB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBzUkdCVG9MaW5lYXIoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCBkaWZmdXNlTWFwLCB2X1RleGNvb3JkICk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleC5yZ2IgPSBwb3codGV4LnJnYiwgdmVjMygyLjIpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSB0ZXgucmdiO1xcbiNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hICo9IHRleC5hO1xcbiNlbmRpZlxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VDb2xvciA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge1xcbiBkaWZmdXNlQ29sb3IgKz0gYW1iaWVudExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZUNvbG9yICs9IGNhbGNBbWJpZW50U0hMaWdodChfaWR4Xywgdl9Ob3JtYWwpICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNQb2ludCk7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IFBPSU5UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBwb2ludExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW2ldO1xcbiB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIGxpZ2h0RGlyZWN0aW9uIC89IGRpc3Q7XFxuIGZsb2F0IG5kbCA9IGRvdCggdl9Ob3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBjbGFtcChuZGwsIDAuMCwgMS4wKSAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSAtZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltpXTtcXG4gdmVjMyBsaWdodENvbG9yID0gZGlyZWN0aW9uYWxMaWdodENvbG9yW2ldO1xcbiBmbG9hdCBuZGwgPSBkb3Qodl9Ob3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbikpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IC1zcG90TGlnaHRQb3NpdGlvbltpXTtcXG4gdmVjMyBzcG90TGlnaHREaXJlY3Rpb24gPSAtbm9ybWFsaXplKCBzcG90TGlnaHREaXJlY3Rpb25baV0gKTtcXG4gdmVjMyBsaWdodENvbG9yID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyggYiAtIGEpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24pO1xcbiBuZGwgPSBjbGFtcChuZGwsIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbiAqICgxLjAtZmFsbG9mZikgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZGlmZnVzZUNvbG9yO1xcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZihsaW5lV2lkdGggPiAwLilcXG4ge1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKGdsX0ZyYWdDb2xvci5hIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiBnbF9GcmFnQ29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKGdsX0ZyYWdDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb3NSR0IoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkud2lyZWZyYW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LndpcmVmcmFtZS5mcmFnbWVudFxcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMS4wO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAoMS4wLWVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBhbHBoYTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5za3lib3gudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBza3lib3hcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc2t5Ym94LmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjZcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgRVFVSVJFQ1RBTkdVTEFSXFxudW5pZm9ybSBzYW1wbGVyMkQgZW52aXJvbm1lbnRNYXA7XFxuI2Vsc2VcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbG9kOiAwLjA7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG4gZmxvYXQgcGhpID0gYWNvcyhWLnkpO1xcbiBmbG9hdCB0aGV0YSA9IGF0YW4oLVYueCwgVi56KSArIFBJICogMC41O1xcbiB2ZWMyIHV2ID0gdmVjMih0aGV0YSAvIDIuMCAvIFBJLCBwaGkgLyBQSSk7XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGVudmlyb25tZW50TWFwLCBmcmFjdCh1dikpKTtcXG4jZWxzZVxcbiAjaWYgZGVmaW5lZChMT0QpIHx8IGRlZmluZWQoU1VQUE9SVF9URVhUVVJFX0xPRClcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgViwgbG9kKSk7XFxuICNlbHNlXFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIFYpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodGV4ZWwucmdiLCAxLjApKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgbGlnaHRFc3NsIGZyb20gJy4vc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCB1dGlsRXNzbCBmcm9tICcuL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGJhc2ljRXNzbCBmcm9tICcuL3NvdXJjZS9iYXNpYy5nbHNsLmpzJztcclxuaW1wb3J0IGxhbWJlcnRFc3NsIGZyb20gJy4vc291cmNlL2xhbWJlcnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBzdGFuZGFyZEVzc2wgZnJvbSAnLi9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB3aXJlZnJhbWVFc3NsIGZyb20gJy4vc291cmNlL3dpcmVmcmFtZS5nbHNsLmpzJztcclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWJyYXJ5IGZyb20gJy4vbGlicmFyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10odXRpbEVzc2wpO1xyXG5cclxuLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcblNoYWRlclsnaW1wb3J0J10oYmFzaWNFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShsYW1iZXJ0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10oc3RhbmRhcmRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh3aXJlZnJhbWVFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShza3lib3hFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShwcmV6RXNzbCk7XHJcblxyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmJhc2ljJywgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5sYW1iZXJ0JywgU2hhZGVyLnNvdXJjZSgnY2xheS5sYW1iZXJ0LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkud2lyZWZyYW1lJywgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkud2lyZWZyYW1lLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnNreWJveCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5wcmV6JywgU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmQnLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnN0YW5kYXJkTVInLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuXHJcbi8vIFRPRE8gTXVzdCBleHBvcnQgYSBtb2R1bGUgYW5kIGJlIHVzZWQgaW4gdGhlIG90aGVyIG1vZHVsZXMuIE9yIGl0IHdpbGwgYmUgdHJlZSBzaGFrZWRcclxuZXhwb3J0IGRlZmF1bHQgbGlicmFyeTsiLCIvKipcclxuICogZ2xURiBMb2FkZXJcclxuICogU3BlY2lmaWNhdGlvbiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWRcclxuICpcclxuICogVE9ETyBNb3JwaCB0YXJnZXRzXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsIGZyb20gJy4uL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4uL3NoYWRlci9saWJyYXJ5JztcclxuaW1wb3J0IFNrZWxldG9uIGZyb20gJy4uL1NrZWxldG9uJztcclxuaW1wb3J0IEpvaW50IGZyb20gJy4uL0pvaW50JztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5cclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuaW1wb3J0IFRyYWNrQ2xpcCBmcm9tICcuLi9hbmltYXRpb24vVHJhY2tDbGlwJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayBmcm9tICcuLi9hbmltYXRpb24vU2FtcGxlclRyYWNrJztcclxuXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vLyBJbXBvcnQgYnVpbHRpbiBzaGFkZXJcclxuaW1wb3J0ICcuLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcbnZhciBzZW1hbnRpY0F0dHJpYnV0ZU1hcCA9IHtcclxuICAgICdOT1JNQUwnOiAnbm9ybWFsJyxcclxuICAgICdQT1NJVElPTic6ICdwb3NpdGlvbicsXHJcbiAgICAnVEVYQ09PUkRfMCc6ICd0ZXhjb29yZDAnLFxyXG4gICAgJ1RFWENPT1JEXzEnOiAndGV4Y29vcmQxJyxcclxuICAgICdXRUlHSFRTXzAnOiAnd2VpZ2h0JyxcclxuICAgICdKT0lOVFNfMCc6ICdqb2ludCcsXHJcbiAgICAnQ09MT1JfMCc6ICdjb2xvcidcclxufTtcclxuXHJcbnZhciBBUlJBWV9DVE9SX01BUCA9IHtcclxuICAgIDUxMjA6IHZlbmRvci5JbnQ4QXJyYXksXHJcbiAgICA1MTIxOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgIDUxMjI6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgNTEyMzogdmVuZG9yLlVpbnQxNkFycmF5LFxyXG4gICAgNTEyNTogdmVuZG9yLlVpbnQzMkFycmF5LFxyXG4gICAgNTEyNjogdmVuZG9yLkZsb2F0MzJBcnJheVxyXG59O1xyXG52YXIgU0laRV9NQVAgPSB7XHJcbiAgICBTQ0FMQVI6IDEsXHJcbiAgICBWRUMyOiAyLFxyXG4gICAgVkVDMzogMyxcclxuICAgIFZFQzQ6IDQsXHJcbiAgICBNQVQyOiA0LFxyXG4gICAgTUFUMzogOSxcclxuICAgIE1BVDQ6IDE2XHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBhY2Nlc3NvcklkeCwgaXNJbmRpY2VzKSB7XHJcbiAgICB2YXIgYWNjZXNzb3JJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG5cclxuICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbYWNjZXNzb3JJbmZvLmJ1ZmZlclZpZXddO1xyXG4gICAgdmFyIGJ5dGVPZmZzZXQgPSBhY2Nlc3NvckluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IEFSUkFZX0NUT1JfTUFQW2FjY2Vzc29ySW5mby5jb21wb25lbnRUeXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG5cclxuICAgIHZhciBzaXplID0gU0laRV9NQVBbYWNjZXNzb3JJbmZvLnR5cGVdO1xyXG4gICAgaWYgKHNpemUgPT0gbnVsbCAmJiBpc0luZGljZXMpIHtcclxuICAgICAgICBzaXplID0gMTtcclxuICAgIH1cclxuICAgIHZhciBhcnIgPSBuZXcgQXJyYXlDdG9yKGJ1ZmZlciwgYnl0ZU9mZnNldCwgc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcblxyXG4gICAgdmFyIHF1YW50aXplRXh0ZW5zaW9uID0gYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnMgJiYgYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnNbJ1dFQjNEX3F1YW50aXplZF9hdHRyaWJ1dGVzJ107XHJcbiAgICBpZiAocXVhbnRpemVFeHRlbnNpb24pIHtcclxuICAgICAgICB2YXIgZGVjb2RlZEFyciA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHNpemUgKiBhY2Nlc3NvckluZm8uY291bnQpO1xyXG4gICAgICAgIHZhciBkZWNvZGVNYXRyaXggPSBxdWFudGl6ZUV4dGVuc2lvbi5kZWNvZGVNYXRyaXg7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldDtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGU7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldCA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGUgPSBuZXcgQXJyYXkoc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgZGVjb2RlT2Zmc2V0W2tdID0gZGVjb2RlTWF0cml4W3NpemUgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgICAgIGRlY29kZVNjYWxlW2tdID0gZGVjb2RlTWF0cml4W2sgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWNjZXNzb3JJbmZvLmNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIGRlY29kZWRBcnJbaSAqIHNpemUgKyBrXSA9IGFycltpICogc2l6ZSArIGtdICogZGVjb2RlU2NhbGVba10gKyBkZWNvZGVPZmZzZXRba107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyciA9IGRlY29kZWRBcnI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlNjRUb0JpbmFyeShpbnB1dCwgY2hhclN0YXJ0KSB7XHJcbiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XHJcbiAgICB2YXIgbG9va3VwID0gbmV3IFVpbnQ4QXJyYXkoMTMwKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xyXG4gICAgfVxyXG4gICAgLy8gSWdub3JlXHJcbiAgICB2YXIgbGVuID0gaW5wdXQubGVuZ3RoIC0gY2hhclN0YXJ0O1xyXG4gICAgaWYgKGlucHV0LmNoYXJBdChsZW4gLSAxKSA9PT0gJz0nKSB7IGxlbi0tOyB9XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuXHJcbiAgICB2YXIgdWFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbiAvIDQpICogMyk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBjaGFyU3RhcnQ7IGkgPCB1YXJyYXkubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjMSA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMiA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMyA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjNCA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG5cclxuICAgICAgICB1YXJyYXlbaSsrXSA9IChjMSA8PCAyKSB8IChjMiA+PiA0KTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzIgJiAxNSkgPDwgNCkgfCAoYzMgPj4gMik7XHJcbiAgICAgICAgdWFycmF5W2krK10gPSAoKGMzICYgMykgPDwgNikgfCBjNDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdWFycmF5LmJ1ZmZlcjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmxvYWRlci5HTFRGLlJlc3VsdFxyXG4gKiBAcHJvcGVydHkge09iamVjdH0ganNvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlfSByb290Tm9kZVxyXG4gKiBAcHJvcGVydHkge2NsYXkuQ2FtZXJhW119IGNhbWVyYXNcclxuICogQHByb3BlcnR5IHtjbGF5LlRleHR1cmVbXX0gdGV4dHVyZXNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1hdGVyaWFsW119IG1hdGVyaWFsc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuU2tlbGV0b25bXX0gc2tlbGV0b25zXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NZXNoW119IG1lc2hlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFtdfSBjbGlwc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTm9kZVtdfSBub2Rlc1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5sb2FkZXIuR0xURlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdMVEZMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYjICovIHtcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIHJvb3ROb2RlOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHVyaSBwYXJzaW5nLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHRleHR1cmUgdXJpIHBhcnNpbmcuIERlZmF1bHRseSB1c2UgdGhlIHJvb3RQYXRoXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIGJ1ZmZlciB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGJ1ZmZlclJvb3RQYXRoOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hhZGVyIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgbWF0ZXJpYWxzLlxyXG4gICAgICogQHR5cGUge3N0cmluZ3xjbGF5LlNoYWRlcn1cclxuICAgICAqIEBkZWZhdWx0ICdjbGF5LnN0YW5kYXJkJ1xyXG4gICAgICovXHJcbiAgICBzaGFkZXI6ICdjbGF5LnN0YW5kYXJkJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSB7QGxpbmsgY2xheS5TdGFuZGFyZE1hdGVyaWFsfVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdXNlU3RhbmRhcmRNYXRlcmlhbDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBjYW1lcmFzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVDYW1lcmE6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBhbmltYXRpb25zLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVBbmltYXRpb246IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIG1lc2hlc1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVNZXNoOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSB0ZXh0dXJlcy5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbmNsdWRlVGV4dHVyZTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzT3JpZ2luOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvNjc0XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVGbGlwWTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogZmFsc2UsXHJcblxyXG4gICAgc2hhZGVyTGlicmFyeTogbnVsbFxyXG59LFxyXG5mdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hhZGVyTGlicmFyeSkge1xyXG4gICAgICAgIHRoaXMuc2hhZGVyTGlicmFyeSA9IHNoYWRlckxpYnJhcnkuY3JlYXRlTGlicmFyeSgpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBpc0JpbmFyeSA9IHVybC5lbmRzV2l0aCgnLmdsYicpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdFBhdGggPSB1cmwuc2xpY2UoMCwgdXJsLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uIChwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogaXNCaW5hcnkgPyAnYXJyYXlidWZmZXInIDogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNCaW5hcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlQmluYXJ5KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlIGdsVEYgYmluYXJ5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBidWZmZXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZUJpbmFyeTogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLCAwLCA0KTtcclxuICAgICAgICBpZiAoaGVhZGVyWzBdICE9PSAweDQ2NTQ2QzY3KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IEludmFsaWQgaGVhZGVyJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhlYWRlclswXSA8IDIpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdPbmx5IGdsVEYyLjAgaXMgc3VwcG9ydGVkLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLCAxMik7XHJcblxyXG4gICAgICAgIHZhciBqc29uO1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcbiAgICAgICAgLy8gUmVhZCBjaHVua3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFWaWV3LmJ5dGVMZW5ndGg7KSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua0xlbmd0aCA9IGRhdGFWaWV3LmdldFVpbnQzMihpLCB0cnVlKTtcclxuICAgICAgICAgICAgaSArPSA0O1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtUeXBlID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcblxyXG4gICAgICAgICAgICAvLyBqc29uXHJcbiAgICAgICAgICAgIGlmIChjaHVua1R5cGUgPT09IDB4NEU0RjUzNEEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWZmZXIsIGkgKyAxMiwgY2h1bmtMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETywgZm9yIHRoZSBicm93c2VyIG5vdCBzdXBwb3J0IFRleHREZWNvZGVyLlxyXG4gICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBkZWNvZGVyLmRlY29kZShhcnIpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShzdHIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0pTT04gUGFyc2UgZXJyb3I6JyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNodW5rVHlwZSA9PT0gMHgwMDRFNDk0Mikge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlci5zbGljZShpICsgMTIsIGkgKyAxMiArIGNodW5rTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgKz0gY2h1bmtMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghanNvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0ludmFsaWQgZ2xURiBiaW5hcnkgZm9ybWF0OiBDYW5cXCd0IGZpbmQgSlNPTi4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoanNvbiwgYnVmZmVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGpzb25cclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJbXX0gW2J1ZmZlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZTogZnVuY3Rpb24gKGpzb24sIGJ1ZmZlcnMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgIGJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICBidWZmZXJWaWV3czogW10sXHJcbiAgICAgICAgICAgIG1hdGVyaWFsczogW10sXHJcbiAgICAgICAgICAgIHRleHR1cmVzOiBbXSxcclxuICAgICAgICAgICAgbWVzaGVzOiBbXSxcclxuICAgICAgICAgICAgam9pbnRzOiBbXSxcclxuICAgICAgICAgICAgc2tlbGV0b25zOiBbXSxcclxuICAgICAgICAgICAgY2FtZXJhczogW10sXHJcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcclxuICAgICAgICAgICAgY2xpcHM6IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBNb3VudCBvbiB0aGUgcm9vdCBub2RlIGlmIGdpdmVuXHJcbiAgICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5yb290Tm9kZSB8fCBuZXcgU2NlbmUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZCgpIHtcclxuICAgICAgICAgICAgbG9hZGluZy0tO1xyXG4gICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgYWxyZWFkeSBsb2FkIGJ1ZmZlcnNcclxuICAgICAgICBpZiAoYnVmZmVycykge1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IGJ1ZmZlcnMuc2xpY2UoKTtcclxuICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTG9hZCBidWZmZXJzXHJcbiAgICAgICAgICAgIHV0aWwuZWFjaChqc29uLmJ1ZmZlcnMsIGZ1bmN0aW9uIChidWZmZXJJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gYnVmZmVySW5mby51cmk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fbG9hZEJ1ZmZlcnMocGF0aCwgZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi5idWZmZXJzW2lkeF0gPSBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBjaGVja0xvYWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgICAgICBzY2VuZTogc2VsZi5yb290Tm9kZSA/IG51bGwgOiByb290Tm9kZSxcclxuICAgICAgICAgICAgICAgIHJvb3ROb2RlOiBzZWxmLnJvb3ROb2RlID8gcm9vdE5vZGUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhczogbGliLmNhbWVyYXMsXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlczogbGliLnRleHR1cmVzLFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxzOiBsaWIubWF0ZXJpYWxzLFxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b25zOiBsaWIuc2tlbGV0b25zLFxyXG4gICAgICAgICAgICAgICAgbWVzaGVzOiBsaWIuaW5zdGFuY2VkTWVzaGVzLFxyXG4gICAgICAgICAgICAgICAgY2xpcHM6IGxpYi5jbGlwcyxcclxuICAgICAgICAgICAgICAgIG5vZGVzOiBsaWIubm9kZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZEJ1ZmZlcihpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAvLyBCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuXHJcbiAgICAgICAgICAgIGlmIChsaWIuYnVmZmVycy5sZW5ndGggIT09IGpzb24uYnVmZmVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCAnQnVmZmVyIG5vdCBsb2FkIGNvbXBsZXRlLicpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGpzb24uYnVmZmVyVmlld3MuZm9yRWFjaChmdW5jdGlvbiAoYnVmZmVyVmlld0luZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgICAgICAgICAgbGliLmJ1ZmZlclZpZXdzW2lkeF0gPSBsaWIuYnVmZmVyc1tidWZmZXJWaWV3SW5mby5idWZmZXJdXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCwgKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCkgKyAoYnVmZmVyVmlld0luZm8uYnl0ZUxlbmd0aCB8fCAwKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlVGV4dHVyZXMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWF0ZXJpYWxzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZU1lc2hlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlTm9kZXMoanNvbiwgbGliKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBvbmUgc2NlbmUuXHJcbiAgICAgICAgICAgIGlmIChqc29uLnNjZW5lcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNjZW5lSW5mbyA9IGpzb24uc2NlbmVzW2pzb24uc2NlbmUgfHwgMF07IC8vIERlZmF1bHQgdXNlIHRoZSBmaXJzdCBzY2VuZS5cclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZUluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lSW5mby5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tzY2VuZUluZm8ubm9kZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290Tm9kZS5hZGQobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VTa2lucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZUFuaW1hdGlvbnMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW1tZWRpYXRlbHkpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluYXJ5IGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVCdWZmZXJQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy5idWZmZXJSb290UGF0aDtcclxuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByb290UGF0aCA9IHRoaXMucm9vdFBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVUZXh0dXJlUGF0aDogZnVuY3Rpb24gKHBhdGgpIHtcclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoLm1hdGNoKC9eZGF0YTooLio/KWJhc2U2NCwvKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByb290UGF0aCA9IHRoaXMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1ZmZlciBsb2FkZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25zdWNjZXNzXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbmVycm9yXHJcbiAgICAgKi9cclxuICAgIGxvYWRCdWZmZXI6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHBhdGgsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uZXJyb3IgJiYgb25lcnJvcihidWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTaGFkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhZGVyID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkZXJMaWJyYXJ5LmdldCh0aGlzLnNoYWRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9sb2FkQnVmZmVyczogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBiYXNlNjRQcmVmaXggPSAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCc7XHJcbiAgICAgICAgdmFyIHN0clN0YXJ0ID0gcGF0aC5zdWJzdHIoMCwgYmFzZTY0UHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHN0clN0YXJ0ID09PSBiYXNlNjRQcmVmaXgpIHtcclxuICAgICAgICAgICAgb25zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgYmFzZTY0VG9CaW5hcnkocGF0aCwgYmFzZTY0UHJlZml4Lmxlbmd0aClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEJ1ZmZlcihcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUJ1ZmZlclBhdGgocGF0aCksXHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MsXHJcbiAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzEwMFxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTNcclxuICAgIF9wYXJzZVNraW5zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBza2VsZXRvbnMgYW5kIGpvaW50c1xyXG4gICAgICAgIHZhciBoYXZlSW52QmluZE1hdHJpY2VzID0gZmFsc2U7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uc2tpbnMsIGZ1bmN0aW9uIChza2luSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbih7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBza2luSW5mby5uYW1lXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNraW5JbmZvLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVJZHggPSBza2luSW5mby5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IG5ldyBKb2ludCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHNrZWxldG9uLmpvaW50cy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2goam9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNrZWxldG9uLnJlbGF0aXZlUm9vdE5vZGUgPSBsaWIubm9kZXNbc2tpbkluZm8uc2tlbGV0b25dIHx8IHRoaXMucm9vdE5vZGU7XHJcbiAgICAgICAgICAgIGlmIChza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBoYXZlSW52QmluZE1hdHJpY2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBJQk1JbmZvID0ganNvbi5hY2Nlc3NvcnNbc2tpbkluZm8uaW52ZXJzZUJpbmRNYXRyaWNlc107XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbGliLmJ1ZmZlclZpZXdzW0lCTUluZm8uYnVmZmVyVmlld107XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IElCTUluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBJQk1JbmZvLmNvdW50ICogMTY7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNpemUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnNldEpvaW50TWF0cmljZXNBcnJheShhcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludE1hdHJpY2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGliLnNrZWxldG9uc1tpZHhdID0gc2tlbGV0b247XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGVuYWJsZVNraW5uaW5nRm9yTWVzaChtZXNoLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIG1lc2guc2tlbGV0b24gPSBza2VsZXRvbjtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSBqb2ludEluZGljZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNrZWxldG9uLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzKG1lc2guZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRKb2ludEluZGV4KGpvaW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBqb2ludC5pbmRleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIG5vZGVJZHgpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNraW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5JZHggPSBub2RlSW5mby5za2luO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbGliLnNrZWxldG9uc1tza2luSWR4XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludEluZGljZXMgPSBza2VsZXRvbi5qb2ludHMubWFwKGdldEpvaW50SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG5vZGUsIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWVzaCBoYXZlIG11bHRpcGxlIHByaW1pdGl2ZXNcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2goY2hpbGRyZW5baV0sIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VUZXh0dXJlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLnRleHR1cmVzLCBmdW5jdGlvbiAodGV4dHVyZUluZm8sIGlkeCl7XHJcbiAgICAgICAgICAgIC8vIHNhbXBsZXJzIGlzIG9wdGlvbmFsXHJcbiAgICAgICAgICAgIHZhciBzYW1wbGVySW5mbyA9IChqc29uLnNhbXBsZXJzICYmIGpzb24uc2FtcGxlcnNbdGV4dHVyZUluZm8uc2FtcGxlcl0pIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgICAgICAgICBbJ3dyYXBTJywgJ3dyYXBUJywgJ21hZ0ZpbHRlcicsICdtaW5GaWx0ZXInXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzYW1wbGVySW5mb1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyhwYXJhbWV0ZXJzLCB7XHJcbiAgICAgICAgICAgICAgICB3cmFwUzogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICB3cmFwVDogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICBmbGlwWTogdGhpcy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IHRoaXMudGV4dHVyZUNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0ZXh0dXJlSW5mby50YXJnZXQgfHwgZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSB0ZXh0dXJlSW5mby5mb3JtYXQ7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGdsZW51bS5URVhUVVJFXzJEKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2VJbmZvID0ganNvbi5pbWFnZXNbdGV4dHVyZUluZm8uc291cmNlXTtcclxuICAgICAgICAgICAgICAgIHZhciB1cmk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmZvLnVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IHRoaXMucmVzb2x2ZVRleHR1cmVQYXRoKGltYWdlSW5mby51cmkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VJbmZvLmJ1ZmZlclZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2xpYi5idWZmZXJWaWV3c1tpbWFnZUluZm8uYnVmZmVyVmlld11dLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGltYWdlSW5mby5taW1lVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1cmkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJpLCB0aGlzLmNyb3NzT3JpZ2luKTtcclxuICAgICAgICAgICAgICAgICAgICBsaWIudGV4dHVyZXNbaWR4XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIGNvbW1vbk1hdGVyaWFsSW5mbyA9IG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddO1xyXG4gICAgICAgIHVuaWZvcm1zID0gY29tbW9uTWF0ZXJpYWxJbmZvLnZhbHVlcyB8fCB7fTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5kaWZmdXNlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNlID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmRpZmZ1c2VdIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdW5pZm9ybXMuZW1pc3Npb24gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmVtaXNzaW9uID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmVtaXNzaW9uXSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZGlmZnVzZSddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZW1pc3Npb24nXSBpbnN0YW5jZW9mIFRleHR1cmUyRCkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9NRVRBTE5FU1MnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRE9VQkxFX1NJREVEJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1bmlmb3Jtcy50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRpZmZ1c2VQcm9wID0gdW5pZm9ybXNbJ2RpZmZ1c2UnXTtcclxuICAgICAgICBpZiAoZGlmZnVzZVByb3ApIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZnVzZVByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmdXNlUHJvcCA9IGRpZmZ1c2VQcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmNvbG9yID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2NvbG9yJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgeyAvLyBUZXh0dXJlXHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZGlmZnVzZU1hcCA9IGRpZmZ1c2VQcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbWlzc2lvblByb3AgPSB1bmlmb3Jtc1snZW1pc3Npb24nXTtcclxuICAgICAgICBpZiAoZW1pc3Npb25Qcm9wICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW1pc3Npb25Qcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgZW1pc3Npb25Qcm9wID0gZW1pc3Npb25Qcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaW9uID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2lvbicsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5lbWlzc2l2ZU1hcCA9IGVtaXNzaW9uUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZW1pc3NpdmVNYXAnLCBlbWlzc2lvblByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICAgICAgdmFyIG5vcm1hbFRleHR1cmVJbmRleCA9IG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4O1xyXG4gICAgICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdub3JtYWxNYXAnLCBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NoaW5pbmVzcyddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGdsb3NzaW5lc3MgPSBNYXRoLmxvZyh1bmlmb3Jtc1snc2hpbmluZXNzJ10pIC8gTWF0aC5sb2coODE5Mik7XHJcbiAgICAgICAgICAgIC8vIFVuaWZvcm0gZ2xvc3NpbmVzc1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdyb3VnaG5lc3MnLCAxIC0gZ2xvc3NpbmVzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCAwLjMpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDAuMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc3BlY3VsYXInXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc3BlY3VsYXJDb2xvcicsIHVuaWZvcm1zWydzcGVjdWxhciddLnNsaWNlKDAsIDMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnYWxwaGEnLCB1bmlmb3Jtc1sndHJhbnNwYXJlbmN5J10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyTWV0YWxsaWNSb3VnaG5lc3NUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCByb3VnaG5lc3NNYXAsIG1ldGFsbmVzc01hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIHRoZSBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIGBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZWAgaXMgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB2YXIgbm9ybWFsU2NhbGUgPSAxLjA7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvclRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZGlmZnVzZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgPSBsaWIudGV4dHVyZXNbbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdtZXRhbG5lc3NNYXAnLCAncm91Z2huZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG5cclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbFNjYWxlID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuc2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYmFzZUNvbG9yID0gbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvckZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcDogcm91Z2huZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzc01hcDogbWV0YWxuZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogYmFzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogYmFzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBtZXRhbG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5tZXRhbGxpY0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICByb3VnaG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5yb3VnaG5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmIHx8IDAsXHJcbiAgICAgICAgICAgIG5vcm1hbFNjYWxlOiBub3JtYWxTY2FsZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMucm91Z2huZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGdsVEYgbWV0YWxsaWNGYWN0b3Igd2lsbCBkbyBtdWx0aXBseSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gU3RhbmRhcmRNYXRlcmlhbC5cclxuICAgICAgICAgICAgLy8gU28gc2ltcGx5IGlnbm9yZSBpdFxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLm1ldGFsbmVzcyA9IDAuNTtcclxuICAgICAgICAgICAgY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgU3RhbmRhcmRNYXRlcmlhbCh1dGlsLmV4dGVuZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGFscGhhVGVzdDogYWxwaGFUZXN0LFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCxcclxuICAgICAgICAgICAgICAgIC8vIEcgY2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMSxcclxuICAgICAgICAgICAgICAgIC8vIEIgQ2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMlxyXG4gICAgICAgICAgICB9LCBjb21tb25Qcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJywgMSk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTUVUQUxORVNTX0NIQU5ORUwnLCAyKTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRElGRlVTRU1BUF9BTFBIQV9BTFBIQScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU3RhbmRhcmRNYXRlcmlhbCBkb2VzblxcJ3Qgc3VwcG9ydCBzcGVjdWxhciBnbG9zc2luZXNzIHdvcmtmbG93IHlldCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCBnbG9zc2luZXNzTWFwLCBzcGVjdWxhck1hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICAvLyBUT0RPIHRleENvb3JkXHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1tzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmRpZmZ1c2VUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCA9IHNwZWN1bGFyTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnc3BlY3VsYXJNYXAnLCAnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUpIHtcclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdvY2NsdXNpb25NYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VDb2xvciA9IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZUZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXA6IGdsb3NzaW5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgc3BlY3VsYXJNYXA6IHNwZWN1bGFyTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXA6IG9jY2x1c2lvbk1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogZGlmZnVzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogZGlmZnVzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBzcGVjdWxhckNvbG9yOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyRmFjdG9yIHx8IFsxLCAxLCAxXSxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5nbG9zc2luZXNzRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIGVtaXNzaW9uOiBtYXRlcmlhbEluZm8uZW1pc3NpdmVGYWN0b3IgfHwgWzAsIDAsIDBdLFxyXG4gICAgICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMSxcclxuICAgICAgICAgICAgYWxwaGFDdXRvZmY6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZiA9PSBudWxsID8gMC45IDogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5nbG9zc2luZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyQ29sb3IgPSBbMSwgMSwgMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJywgMyk7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgIGlmIChhbHBoYVRlc3QpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLnNldChjb21tb25Qcm9wZXJ0aWVzKTtcclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWF0ZXJpYWxzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWF0ZXJpYWxzLCBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9LSFJDb21tb25NYXRlcmlhbFRvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX3BiclNwZWN1bGFyR2xvc3NpbmVzcyddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJTcGVjdWxhckdsb3NzaW5lc3NUb1N0YW5kYXJkKG1hdGVyaWFsSW5mbywgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8ucGJyTWV0YWxsaWNSb3VnaG5lc3MgfHwge30sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWVzaGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tZXNoZXMsIGZ1bmN0aW9uIChtZXNoSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XSA9IFtdO1xyXG4gICAgICAgICAgICAvLyBHZW9tZXRyeVxyXG4gICAgICAgICAgICBmb3IgKHZhciBwcCA9IDA7IHBwIDwgbWVzaEluZm8ucHJpbWl0aXZlcy5sZW5ndGg7IHBwKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVJbmZvID0gbWVzaEluZm8ucHJpbWl0aXZlc1twcF07XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJR05cclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtZXNoSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94OiBuZXcgQm91bmRpbmdCb3goKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNzID0gT2JqZWN0LmtleXMocHJpbWl0aXZlSW5mby5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHNzID0gMDsgc3MgPCBzZW1hbnRpY3MubGVuZ3RoOyBzcysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gc2VtYW50aWNzW3NzXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZXNzb3JJZHggPSBwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gc2VtYW50aWNBdHRyaWJ1dGVNYXBbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBTSVpFX01BUFthdHRyaWJ1dGVJbmZvLnR5cGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVBcnJheSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXZWJHTCBhdHRyaWJ1dGUgYnVmZmVyIG5vdCBzdXBwb3J0IHVpbnQzMi5cclxuICAgICAgICAgICAgICAgICAgICAvLyBEaXJlY3QgdXNlIEZsb2F0MzJBcnJheSBtYXkgYWxzbyBoYXZlIGlzc3VlLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0cmlidXRlQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdXRUlHSFRTXzAnICYmIHNpemUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VpZ2h0IGRhdGEgaW4gUVRFSyBoYXMgb25seSAzIGNvbXBvbmVudCwgdGhlIGxhc3QgY29tcG9uZW50IGNhbiBiZSBldmFsdWF0ZWQgc2luY2UgaXQgaXMgbm9ybWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2VpZ2h0QXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzEgPSBhdHRyaWJ1dGVBcnJheVtpNF0sIHcyID0gYXR0cmlidXRlQXJyYXlbaTQgKyAxXSwgdzMgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDJdLCB3NCA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgM107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd1N1bSA9IHcxICsgdzIgKyB3MyArIHc0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTNdID0gdzEgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAxXSA9IHcyIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodEFycmF5W2kzICsgMl0gPSB3MyAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IHdlaWdodEFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ0NPTE9SXzAnICYmIHNpemUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yQXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0XSA9IGF0dHJpYnV0ZUFycmF5W2kzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAxXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgMl0gPSBhdHRyaWJ1dGVBcnJheVtpMyArIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDNdID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gY29sb3JBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBhdHRyaWJ1dGVBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVUeXBlID0gJ2Zsb2F0JztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1c2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQxNkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAnc2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAndWJ5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdieXRlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS50eXBlID0gYXR0cmlidXRlVHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljID09PSAnUE9TSVRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdW5kaW5nIEJveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gYXR0cmlidXRlSW5mby5taW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBhdHRyaWJ1dGVJbmZvLm1heDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnNldChtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXguc2V0KG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGluZGljZXNcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVJbmZvLmluZGljZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBwcmltaXRpdmVJbmZvLmluZGljZXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tZXRyeS52ZXJ0ZXhDb3VudCA8PSAweGZmZmYgJiYgZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IHZlbmRvci5VaW50MTZBcnJheShnZW9tZXRyeS5pbmRpY2VzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBsaWIubWF0ZXJpYWxzW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsSW5mbyA9IChqc29uLm1hdGVyaWFscyB8fCBbXSlbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgZGVmYXVsdCBtYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiBzZWxmLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBbTWVzaC5QT0lOVFMsIE1lc2guTElORVMsIE1lc2guTElORV9MT09QLCBNZXNoLkxJTkVfU1RSSVAsIE1lc2guVFJJQU5HTEVTLCBNZXNoLlRSSUFOR0xFX1NUUklQLCBNZXNoLlRSSUFOR0xFX0ZBTl1bcHJpbWl0aXZlSW5mby5tb2RlXSB8fCBNZXNoLlRSSUFOR0xFUyxcclxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVHQnVmZmVyOiBtYXRlcmlhbC50cmFuc3BhcmVudFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmN1bGxpbmcgPSAhbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgoKG1hdGVyaWFsIGluc3RhbmNlb2YgU3RhbmRhcmRNYXRlcmlhbCkgJiYgbWF0ZXJpYWwubm9ybWFsTWFwKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRlcmlhbC5pc1RleHR1cmVFbmFibGVkKCdub3JtYWxNYXAnKSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdWRVJURVhfQ09MT1InKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtZXNoLm5hbWUgPSBHTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUoanNvbi5tZXNoZXMsIGlkeCwgcHApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XS5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pbnN0YW5jZUNhbWVyYTogZnVuY3Rpb24gKGpzb24sIG5vZGVJbmZvKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYUluZm8gPSBqc29uLmNhbWVyYXNbbm9kZUluZm8uY2FtZXJhXTtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYUluZm8udHlwZSA9PT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICB2YXIgcGVyc3BlY3RpdmVJbmZvID0gY2FtZXJhSW5mby5wZXJzcGVjdGl2ZSB8fCB7fTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYXNwZWN0OiBwZXJzcGVjdGl2ZUluZm8uYXNwZWN0UmF0aW8sXHJcbiAgICAgICAgICAgICAgICBmb3Y6IHBlcnNwZWN0aXZlSW5mby55Zm92IC8gTWF0aC5QSSAqIDE4MCxcclxuICAgICAgICAgICAgICAgIGZhcjogcGVyc3BlY3RpdmVJbmZvLnpmYXIsXHJcbiAgICAgICAgICAgICAgICBuZWFyOiBwZXJzcGVjdGl2ZUluZm8uem5lYXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgb3J0aG9ncmFwaGljSW5mbyA9IGNhbWVyYUluZm8ub3J0aG9ncmFwaGljIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBvcnRob2dyYXBoaWNJbmZvLnltYWcsXHJcbiAgICAgICAgICAgICAgICByaWdodDogb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogLW9ydGhvZ3JhcGhpY0luZm8ueG1hZyxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogLW9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIG5lYXI6IG9ydGhvZ3JhcGhpY0luZm8uem5lYXIsXHJcbiAgICAgICAgICAgICAgICBmYXI6IG9ydGhvZ3JhcGhpY0luZm8uemZhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZU5vZGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGluc3RhbmNlTWVzaChtZXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtZXNoLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbWVzaC5nZW9tZXRyeSxcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtZXNoLm1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgY3VsbGluZzogbWVzaC5jdWxsaW5nLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogbWVzaC5tb2RlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcyA9IFtdO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKG5vZGVJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGU7XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jYW1lcmEgIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVDYW1lcmEpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9pbnN0YW5jZUNhbWVyYShqc29uLCBub2RlSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBsaWIuY2FtZXJhcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGVJbmZvLm1lc2ggIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJpbWl0aXZlcyA9IGxpYi5tZXNoZXNbbm9kZUluZm8ubWVzaF07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBub2RlIHdpdGggbWVzaCBkaXJlY3RseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gaW5zdGFuY2VNZXNoKHByaW1pdGl2ZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01lc2ggPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1tqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBEdWxwbGljYXRlIG5hbWUuXHJcbiAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLm1hdHJpeCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5sb2NhbFRyYW5zZm9ybS5zZXRBcnJheShub2RlSW5mby5tYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnRyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wb3NpdGlvbi5zZXRBcnJheShub2RlSW5mby50cmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8ucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJvdGF0aW9uLnNldEFycmF5KG5vZGVJbmZvLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2NhbGUuc2V0QXJyYXkobm9kZUluZm8uc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsaWIubm9kZXNbaWR4XSA9IG5vZGU7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGhpZXJhcmNoeVxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tpZHhdO1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUluZm8uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRJZHggPSBub2RlSW5mby5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBsaWIubm9kZXNbY2hpbGRJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQW5pbWF0aW9uczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ2hhbm5lbFBhdGgoY2hhbm5lbEluZm8pIHtcclxuICAgICAgICAgICAgaWYgKGNoYW5uZWxJbmZvLnBhdGggPT09ICd3ZWlnaHRzJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG5vdCBzdXBwb3J0IG1vcnBoIHRhcmdldHMgeWV0LicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxJbmZvLnRhcmdldC5ub2RlICsgJ18nICsgYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXS5pbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aW1lQWNjZXNzb3JNdWx0aXBsaWVkID0ge307XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uYW5pbWF0aW9ucywgZnVuY3Rpb24gKGFuaW1hdGlvbkluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBhbmltYXRpb25JbmZvLmNoYW5uZWxzLmZpbHRlcihjaGVja0NoYW5uZWxQYXRoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2hhbm5lbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEluZm8gPSBjaGFubmVsc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSGFzaCA9IGdldENoYW5uZWxIYXNoKGNoYW5uZWxJbmZvLCBhbmltYXRpb25JbmZvKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZSA9IGxpYi5ub2Rlc1tjaGFubmVsSW5mby50YXJnZXQubm9kZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdID0gbmV3IFNhbXBsZXJUcmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhcmdldE5vZGUgPyB0YXJnZXROb2RlLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXROb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sudGFyZ2V0Tm9kZUluZGV4ID0gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLmlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVMZW4gPSB0cmFjay5jaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZnJhbWVMZW47IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZVtrXSAqPSAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBzYW1wbGVySW5mby5pbnRlcnBvbGF0aW9uIHx8ICdMSU5FQVInO1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gIT09ICdMSU5FQVInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG9ubHkgc3VwcG9ydCBMSU5FQVIgaW50ZXJwb2xhdGlvbi4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGNoYW5uZWxJbmZvLnRhcmdldC5wYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09ICd0cmFuc2xhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJ3Bvc2l0aW9uJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVsc1twYXRoXSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLm91dHB1dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrc0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaGFzaCBpbiB0cmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrc0xpc3QucHVzaCh0cmFja3NbaGFzaF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gbmV3IFRyYWNrQ2xpcCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBhbmltYXRpb25JbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHJhY2tzOiB0cmFja3NMaXN0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICB2YXIgbWF4TGlmZSA9IGxpYi5jbGlwcy5yZWR1Y2UoZnVuY3Rpb24gKG1heFRpbWUsIGNsaXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1heFRpbWUsIGNsaXAubGlmZSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgbGliLmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgY2xpcC5saWZlID0gbWF4TGlmZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpYi5jbGlwcztcclxuICAgIH1cclxufSk7XHJcblxyXG5HTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUgPSBmdW5jdGlvbiAobWVzaGVzLCBpZHgsIHByaW1pdGl2ZUlkeCkge1xyXG4gICAgdmFyIG1lc2hJbmZvID0gbWVzaGVzW2lkeF07XHJcbiAgICB2YXIgbWVzaE5hbWUgPSBtZXNoSW5mby5uYW1lIHx8ICgnbWVzaF8nICsgaWR4KTtcclxuICAgIHJldHVybiBwcmltaXRpdmVJZHggPT09IDAgPyBtZXNoTmFtZSA6IChtZXNoTmFtZSArICckJyArIHByaW1pdGl2ZUlkeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTFRGTG9hZGVyO1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBsaWdodCA9IG5ldyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsKHtcclxuICogICAgICAgICBpbnRlbnNpdHk6IDAuNSxcclxuICogICAgICAgICBjb2xvcjogWzEuMCwgMC4wLCAwLjBdXHJcbiAqICAgICB9KTtcclxuICogICAgIGxpZ2h0LnBvc2l0aW9uLnNldCgxMCwgMTAsIDEwKTtcclxuICogICAgIGxpZ2h0Lmxvb2tBdChjbGF5LlZlY3RvcjMuWkVSTyk7XHJcbiAqICAgICBzY2VuZS5hZGQobGlnaHQpO1xyXG4gKi9cclxudmFyIERpcmVjdGlvbmFsTGlnaHQgPSBMaWdodC5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIFNoYWRvdyBjYXNjYWRlLlxyXG4gICAgICogVXNlIFBTU00gdGVjaG5pcXVlIHdoZW4gaXQgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0Nhc2NhZGU6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdmFpbGFibGUgd2hlbiBzaGFkb3dDYXNjYWRlIGlzIGxhcmdlciB0aGFuIDEgYW5kIGhhdmUgYSB1bmlxdWUgZGlyZWN0aW9uYWwgbGlnaHQgaW4gc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXNjYWRlU3BsaXRMb2dGYWN0b3I6IDAuMlxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0RJUkVDVElPTkFMX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubm9ybWFsaXplKCkubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdICogaW50ZW5zaXR5LCBjb2xvclsxXSAqIGludGVuc2l0eSwgY29sb3JbMl0gKiBpbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5EaXJlY3Rpb25hbH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGlyZWN0aW9uYWxMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5Qb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgUG9pbnRMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuUG9pbnQjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnUE9JTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBwb2ludExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2ludExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlBvaW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuUG9pbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBMaWdodC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBsaWdodC5yYW5nZSA9IHRoaXMucmFuZ2U7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBvaW50TGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BvdFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgU3BvdExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKkBsZW5kcyBjbGF5LmxpZ2h0LlNwb3QgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHVtYnJhQW5nbGU6IDMwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwZW51bWJyYUFuZ2xlOiA0NSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFsbG9mZkZhY3RvcjogMi4wLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dCaWFzOiAwLjAwMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93U2xvcGVTY2FsZTogMi4wXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BPVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHNwb3RMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jb3MoaW5zdGFuY2UudW1icmFBbmdsZSAqIE1hdGguUEkgLyAxODApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodEZhbGxvZmZGYWN0b3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmZhbGxvZmZGYWN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlNwb3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5TcG90LnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICBsaWdodC51bWJyYUFuZ2xlID0gdGhpcy51bWJyYUFuZ2xlO1xyXG4gICAgICAgIGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSB0aGlzLnBlbnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQuZmFsbG9mZkZhY3RvciA9IHRoaXMuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICBsaWdodC5zaGFkb3dCaWFzID0gdGhpcy5zaGFkb3dCaWFzO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUgPSB0aGlzLnNoYWRvd1Nsb3BlU2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwb3RMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5BbWJpZW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50TGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcblxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbWJpZW50TGlnaHQ7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuXHJcbnZhciBLRVlfRlJBTUVCVUZGRVIgPSAnZnJhbWVidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUiA9ICdyZW5kZXJidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9XSURUSCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX3dpZHRoJztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUID0gS0VZX1JFTkRFUkJVRkZFUiArICdfaGVpZ2h0JztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19hdHRhY2hlZCc7XHJcbnZhciBLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEID0gJ2RlcHRodGV4dHVyZV9hdHRhY2hlZCc7XHJcblxyXG52YXIgR0xfRlJBTUVCVUZGRVIgPSBnbGVudW0uRlJBTUVCVUZGRVI7XHJcbnZhciBHTF9SRU5ERVJCVUZGRVIgPSBnbGVudW0uUkVOREVSQlVGRkVSO1xyXG52YXIgR0xfREVQVEhfQVRUQUNITUVOVCA9IGdsZW51bS5ERVBUSF9BVFRBQ0hNRU5UO1xyXG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSBnbGVudW0uQ09MT1JfQVRUQUNITUVOVDA7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5GcmFtZUJ1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZyYW1lQnVmZmVyID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlciMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB1c2UgZGVwdGggYnVmZmVyXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhCdWZmZXI6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICB2aWV3cG9ydDogbnVsbCxcclxuXHJcbiAgICBfd2lkdGg6IDAsXHJcbiAgICBfaGVpZ2h0OiAwLFxyXG5cclxuICAgIF90ZXh0dXJlczogbnVsbCxcclxuXHJcbiAgICBfYm91bmRSZW5kZXJlcjogbnVsbCxcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gVXNlIGNhY2hlXHJcbiAgICB0aGlzLl9jYWNoZSA9IG5ldyBDYWNoZSgpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcbn0sXHJcblxyXG4vKipAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlci5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogR2V0IGF0dGFjaGVkIHRleHR1cmUgd2lkdGhcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIEZJWE1FIENhbid0IHVzZSBiZWZvcmUgI2JpbmRcclxuICAgIGdldFRleHR1cmVXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSBoZWlnaHRcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRleHR1cmVIZWlnaHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmQgdGhlIGZyYW1lYnVmZmVyIHRvIGdpdmVuIHJlbmRlcmVyIGJlZm9yZSByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBib3VuZFxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZW5kZXJlciBhbHJlYWR5IGJvdW5kIHdpdGggYW5vdGhlciBmcmFtZWJ1ZmZlci4gVW5iaW5kIGl0IGZpcnN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0aGlzLl9nZXRGcmFtZUJ1ZmZlckdMKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS5wdXQoJ3ZpZXdwb3J0JywgcmVuZGVyZXIudmlld3BvcnQpO1xyXG5cclxuICAgICAgICB2YXIgaGFzVGV4dHVyZUF0dGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHdpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQ7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBoYXNUZXh0dXJlQXR0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRG8gd2lkdGgsIGhlaWdodCBjaGVja2luZywgbWFrZSBzdXJlIHNpemUgYXJlIHNhbWVcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gb2JqLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBvYmoudGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdGV4dHVyZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RvQXR0YWNoKHJlbmRlcmVyLCBvYmoudGV4dHVyZSwgYXR0YWNobWVudCwgb2JqLnRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoIWhhc1RleHR1cmVBdHRhY2hlZCAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ011c3QgYXR0YWNoIHRleHR1cmUgYmVmb3JlIGJpbmQsIG9yIHJlbmRlcmJ1ZmZlciBtYXkgaGF2ZSBpbmNvcnJlY3Qgd2lkdGggYW5kIGhlaWdodC4nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodGhpcy52aWV3cG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNhY2hlLmdldChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEKSAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZW5kZXIgYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9SRU5ERVJCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSClcclxuICAgICAgICAgICAgICAgICAgICB8fCBoZWlnaHQgIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgX2dsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX1dJRFRILCB3aWR0aCk7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmJpbmQgdGhlIGZyYW1lIGJ1ZmZlciBhZnRlciByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHN0YXR1cyByZWNvcmQgb24gcmVuZGVyZXJcclxuICAgICAgICByZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLl9jYWNoZS5nZXQoJ3ZpZXdwb3J0Jyk7XHJcbiAgICAgICAgLy8gUmVzZXQgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlTWlwbWFwKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICB1cGRhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBvYmoudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIHNvbWUgdGV4dHVyZSBmb3JtYXQgY2FuJ3QgZ2VuZXJhdGUgbWlwbWFwXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUuTlBPVCAmJiB0ZXh0dXJlLnVzZU1pcG1hcFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRleHR1cmUubWluRmlsdGVyID09PSBUZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmUudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScgPyBnbGVudW0uVEVYVFVSRV9DVUJFX01BUCA6IGdsZW51bS5URVhUVVJFXzJEO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyAweDhDRDUsIDM2MDUzLCBGUkFNRUJVRkZFUl9DT01QTEVURVxyXG4gICAgLy8gMHg4Q0Q2LCAzNjA1NCwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDcsIDM2MDU1LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVFxyXG4gICAgLy8gMHg4Q0Q5LCAzNjA1NywgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TXHJcbiAgICAvLyAweDhDREQsIDM2MDYxLCBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFxyXG4gICAgY2hlY2tTdGF0dXM6IGZ1bmN0aW9uIChfZ2wpIHtcclxuICAgICAgICByZXR1cm4gX2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RnJhbWVCdWZmZXJHTDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfRlJBTUVCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfRlJBTUVCVUZGRVIsIHJlbmRlcmVyLmdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHRleHR1cmUoUlRUKSB0byB0aGUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBhdHRhY2g6IGZ1bmN0aW9uICh0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLndpZHRoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gY29sb3IgYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHdpZHRoIGFuZCBoZWlnaHQgY2hlY2tcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGRlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQsIGRldmVsb3BlcnNcclxuICAgICAgICAvLyBDYW4gYXR0YWNoIGEgZGVwdGggdGV4dHVyZSB0byB0aGUgZGVwdGggYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cDovL2Jsb2cudG9qaWNvZGUuY29tLzIwMTIvMDcvdXNpbmctd2ViZ2xkZXB0aHRleHR1cmUuaHRtbFxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kUmVuZGVyZXIgPSB0aGlzLl9ib3VuZFJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBfZ2wgPSBib3VuZFJlbmRlcmVyICYmIGJvdW5kUmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXM7XHJcblxyXG4gICAgICAgIGlmIChfZ2wpIHtcclxuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgICAgIGNhY2hlLnVzZShib3VuZFJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhdHRhY2hlZFxyXG4gICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy50YXJnZXQgPT09IHRhcmdldFxyXG4gICAgICAgICAgICAmJiBwcmV2aW91cy50ZXh0dXJlID09PSB0ZXh0dXJlXHJcbiAgICAgICAgICAgICYmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gIT0gbnVsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJvdW5kUmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY2FuQXR0YWNoID0gdGhpcy5fZG9BdHRhY2goYm91bmRSZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgLy8gU2V0IHZpZXdwb3J0IGFnYWluIGluY2FzZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgc2l6ZSB0ZXh0dXJlcy5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBib3VuZFJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0udGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2RvQXR0YWNoOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdGV4dHVyZSBpcyBhbHdheXMgdXBkYXRlZFxyXG4gICAgICAgIC8vIEJlY2F1c2UgdGV4dHVyZSB3aWR0aCBvciBoZWlnaHQgbWF5IGJlIGNoYW5nZWQgYW5kIGluIHRoaXMgd2UgY2FuJ3QgYmUgbm90aWZpZWRcclxuICAgICAgICAvLyBGSVhNRSBhd2t3YXJkO1xyXG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSB0ZXh0dXJlLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhbmQgdGFyZ2V0IG5vdCBjaGFuZ2VkXHJcbiAgICAgICAgICAgIGlmIChvYmoudGV4dHVyZSA9PT0gdGV4dHVyZSAmJiBvYmoudGFyZ2V0ID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRhY2htZW50ID0gK2F0dGFjaG1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBjYW5BdHRhY2ggPSB0cnVlO1xyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdXRUJHTF9kZXB0aF90ZXh0dXJlJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGVwdGggdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyJyk7XHJcbiAgICAgICAgICAgICAgICBjYW5BdHRhY2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9DT01QT05FTlRcclxuICAgICAgICAgICAgICAgICYmIHRleHR1cmUuZm9ybWF0ICE9PSBnbGVudW0uREVQVEhfU1RFTkNJTFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSB0ZXh0dXJlIGF0dGFjaGVkIHRvIGRlcHRoIGJ1ZmZlciBpcyBub3QgYSB2YWxpZC4nKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHJlbmRlciBidWZmZXIgY3JlYXRlZCBwcmV2aW91c1xyXG4gICAgICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gdGhpcy5fY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgY2FuIG9ubHkgYmUgMFxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCB3ZWJnbFRleHR1cmUsIDApO1xyXG5cclxuICAgICAgICBpZiAoIWF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoJ2F0dGFjaGVkX3RleHR1cmVzJywgYXR0YWNoZWRUZXh0dXJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0udGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW5BdHRhY2g7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb0RldGFjaDogZnVuY3Rpb24gKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gRGV0YWNoIGEgdGV4dHVyZSBmcm9tIGZyYW1lYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9XZWJHTC9ibG9iL21hc3Rlci9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjAvY29uZm9ybWFuY2UvZnJhbWVidWZmZXItdGVzdC5odG1sI0wxNDVcclxuICAgICAgICBfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIHRhcmdldCwgbnVsbCwgMCk7XHJcblxyXG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gdGhpcy5fY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0pIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBhIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW2F0dGFjaG1lbnQ9Z2wuQ09MT1JfQVRUQUNITUVOVDBdXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt0YXJnZXQ9Z2wuVEVYVFVSRV8yRF1cclxuICAgICAqL1xyXG4gICAgZGV0YWNoOiBmdW5jdGlvbiAoYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gVE9ETyBkZXB0aCBleHRlbnNpb24gY2hlY2sgP1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5fYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKHRoaXMuX2JvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKHRoaXMuX2JvdW5kUmVuZGVyZXIuZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZVxyXG4gICAgICogQHBhcmFtICB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBfZ2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgIGlmIChyZW5kZXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX0ZSQU1FQlVGRkVSKTtcclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgY2FjaGUgZm9yIHJldXNpbmdcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG5cclxuICAgIH1cclxufSk7XHJcblxyXG5GcmFtZUJ1ZmZlci5ERVBUSF9BVFRBQ0hNRU5UID0gR0xfREVQVEhfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDAgPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDtcclxuRnJhbWVCdWZmZXIuU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLlNURU5DSUxfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZyYW1lQnVmZmVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZXJ0ZXhHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci92ZXJ0ZXguZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKHZlcnRleEdsc2wpO1xyXG5cclxudmFyIHBsYW5lR2VvID0gbmV3IFBsYW5lKCk7XHJcbnZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgZ2VvbWV0cnk6IHBsYW5lR2VvLFxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcbn0pO1xyXG52YXIgY2FtZXJhID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5QYXNzXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUGFzcyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnJhZ21lbnQgc2hhZGVyIHN0cmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gUEVORElORyBzaGFkZXIgb3IgZnJhZ21lbnQgP1xyXG4gICAgICAgIGZyYWdtZW50OiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRlcmlhbH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmRXaXRoUHJldmlvdXM6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckNvbG9yOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJEZXB0aDogdHJ1ZVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpLCB0aGlzLmZyYWdtZW50KTtcclxuICAgIHZhciBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXJcclxuICAgIH0pO1xyXG4gICAgbWF0ZXJpYWwuZW5hYmxlVGV4dHVyZXNBbGwoKTtcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcblxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMubWF0ZXJpYWwudW5pZm9ybXNbbmFtZV07XHJcbiAgICAgICAgaWYgKHVuaWZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGF0dGFjaG1lbnRcclxuICAgICAqL1xyXG4gICAgYXR0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlLCBhdHRhY2htZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXRzID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICB0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRldGFjaE91dHB1dDogZnVuY3Rpb24odGV4dHVyZSkge1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPT09IHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMub3V0cHV0c1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcmFtZUJ1ZmZlcn0gW2ZyYW1lQnVmZmVyXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICAgICAgLy8gTVJUIFN1cHBvcnQgaW4gY2hyb21lXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxyXG4gICAgICAgICAgICB2YXIgZXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9kcmF3X2J1ZmZlcnMnKTtcclxuICAgICAgICAgICAgaWYgKGV4dCAmJiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGSVhNRSBEb24ndCBjbGVhciBpbiBlYWNoIHBhc3MgaW4gZGVmYXVsdCwgbGV0IHRoZSBjb2xvciBvdmVyd3JpdGUgdGhlIGJ1ZmZlclxyXG4gICAgICAgIC8vIEZJWE1FIHBpeGVscyBtYXkgYmUgZGlzY2FyZFxyXG4gICAgICAgIHZhciBjbGVhckJpdCA9IHRoaXMuY2xlYXJEZXB0aCA/IF9nbC5ERVBUSF9CVUZGRVJfQklUIDogMDtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQ29sb3IpIHtcclxuICAgICAgICAgICAgY2xlYXJCaXQgPSBjbGVhckJpdCB8IF9nbC5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgY2MgPSB0aGlzLmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNjKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNsZWFyQ29sb3IoY2NbMF0sIGNjWzFdLCBjY1syXSwgY2NbM10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9nbC5jbGVhcihjbGVhckJpdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJsZW5kV2l0aFByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgIC8vIEJsZW5kIHdpdGggcHJldmlvdXMgcmVuZGVyZWQgc2NlbmUgaW4gdGhlIGZpbmFsIG91dHB1dFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBDb25maWd1cmUgYmxlbmQuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIEl0IHdpbGwgY2F1c2Ugc2NyZWVuIGJsaW5r77yfXHJcbiAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy51bmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2ltcGx5IGRvIHF1YWQgcmVuZGVyaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbmRlclF1YWQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW21lc2hdLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXNzO1xyXG4iLCIvLyBUT0RPIFNob3VsZCBub3QgZGVyaXZlZCBmcm9tIG1lc2g/XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgQ3ViZUdlb21ldHJ5IGZyb20gJy4uL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbmltcG9ydCBza3lib3hFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KHNreWJveEVzc2wpO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLlNreWJveFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNreVRleCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBza3lUZXgubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgc2t5Ym94ID0gbmV3IGNsYXkucGx1Z2luLlNreWJveCh7XHJcbiAqICAgICAgICAgc2NlbmU6IHNjZW5lXHJcbiAqICAgICB9KTtcclxuICogICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgc2t5VGV4KTtcclxuICovXHJcbnZhciBTa3lib3ggPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHNreWJveFNoYWRlciA9IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JylcclxuICAgIH0pO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNreWJveFNoYWRlcixcclxuICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnBsdWdpbi5Ta3lib3gucHJvdG90eXBlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2NlbmU6IG51bGwsXHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ3ViZUdlb21ldHJ5KCksXHJcblxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZHVtbXlDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hTY2VuZShzY2VuZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudE1hcCkge1xyXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRNYXAodGhpcy5lbnZpcm9ubWVudE1hcCk7XHJcbiAgICB9XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uU2t5Ym94IyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCB0aGUgc2t5Ym94IHRvIHRoZSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgYXR0YWNoU2NlbmU6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUuc2t5Ym94ID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHNjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSwgdGhpcyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRhY2ggZnJvbSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUub2ZmKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5Ym94ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBza3lib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGVudmlyb25tZW50IG1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmVDdWJlfSBlbnZNYXBcclxuICAgICAqL1xyXG4gICAgc2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uIChlbnZNYXApIHtcclxuICAgICAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgICAgIC8vIExJTkVBUiBmaWx0ZXIgY2FuIHJlbW92ZSB0aGUgYXJ0aWZhY3RzIGluIHBvbGVcclxuICAgICAgICAgICAgZW52TWFwLm1pbkZpbHRlciA9IFRleHR1cmUuTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICovXHJcbiAgICBnZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsLmdldCgnZW52aXJvbm1lbnRNYXAnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2JlZm9yZVJlbmRlclNjZW5lOiBmdW5jdGlvbihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyU2t5Ym94KHJlbmRlcmVyLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJTa3lib3g6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGR1bW15Q2FtZXJhID0gdGhpcy5fZHVtbXlDYW1lcmE7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEuYXNwZWN0ID0gcmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgICAgICBkdW1teUNhbWVyYS5mb3YgPSBjYW1lcmEuZm92IHx8IDUwO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBNYXRyaXg0LmludmVydChkdW1teUNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4LCBkdW1teUNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBkdW1teUNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudmlld01hdHJpeC5jb3B5KGNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIC8vIERvbid0IHJlbWVtYmVyIHRvIGRpc2FibGUgYmxlbmRcclxuICAgICAgICByZW5kZXJlci5nbC5kaXNhYmxlKHJlbmRlcmVyLmdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC5nZXQoJ2xvZCcpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTE9EJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpc10sIGR1bW15Q2FtZXJhKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa3lib3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vKipcclxuICogUGFzcyByZW5kZXJpbmcgc2NlbmUgdG8gYSBlbnZpcm9ubWVudCBjdWJlIG1hcFxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBFeGFtcGxlIG9mIGNhciByZWZsZWN0aW9uXHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgICAgIHdpZHRoOiAyNTYsXHJcbiAqICAgICAgICAgaGVpZ2h0OiAyNTZcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudlBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwKHtcclxuICogICAgICAgICBwb3NpdGlvbjogY2FyLnBvc2l0aW9uLFxyXG4gKiAgICAgICAgIHRleHR1cmU6IGVudk1hcFxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgY2FyQm9keSA9IGNhci5nZXRDaGlsZEJ5TmFtZSgnYm9keScpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGVudlBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRW52aXJvbm1lbnRNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgcmV0ID0gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIGZhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBmYXI6IDEwMDAsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmVhcjogMC4xLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIGlmIHlvdSB3YW4ndCBoYXZlIHNoYWRvdyBpbiBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgfTtcclxuICAgIHZhciBjYW1lcmFzID0gcmV0Ll9jYW1lcmFzID0ge1xyXG4gICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pXHJcbiAgICB9O1xyXG4gICAgY2FtZXJhcy5weC5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5ueC5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5weS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5ueS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5wei5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5uei5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG5cclxuICAgIC8vIEZJWE1FIEluIHdpbmRvd3MsIHVzZSBvbmUgZnJhbWVidWZmZXIgb25seSByZW5kZXJzIG9uZSBzaWRlIG9mIGN1YmVtYXBcclxuICAgIHJldC5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG59LCAgLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB0YXJnZXRcclxuICAgICAqIEByZXR1cm4gIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FtZXJhOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHdlYWsgZm92XHJcbiAgICAgICAgLy8gaHR0cDovL3RoZS13aXRuZXNzLm5ldC9uZXdzLzIwMTIvMDIvc2VhbWxlc3MtY3ViZS1tYXAtZmlsdGVyaW5nL1xyXG4gICAgICAgIHZhciBuID0gdGhpcy50ZXh0dXJlLndpZHRoO1xyXG4gICAgICAgIHZhciBmb3YgPSAyICogTWF0aC5hdGFuKG4gLyAobiAtIDAuNSkpIC8gTWF0aC5QSSAqIDE4MDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9jYW1lcmFzW3RhcmdldF07XHJcbiAgICAgICAgICAgIFZlY3RvcjMuY29weShjYW1lcmEucG9zaXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG5cclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvd01hcFBhc3MpIHtcclxuICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYm91bmRpbmdCb3hMYXN0RnJhbWVcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIGJib3guYXBwbHlUcmFuc2Zvcm0oY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLmNvcHkoYmJveCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsXHJcbiAgICAgICAgICAgICAgICBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnRNYXBQYXNzO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5cclxuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjk0Mzk5MSh2PXZzLjg1KS5hc3B4XHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL3dlYmdsLXRleHR1cmUtdXRpbHMvYmxvYi9tYXN0ZXIvdGV4dHVyZS11dGlsL2Rkcy5qc1xyXG52YXIgRERTX01BR0lDID0gMHgyMDUzNDQ0NDtcclxuXHJcbnZhciBERFNEX0NBUFMgPSAweDE7XHJcbnZhciBERFNEX0hFSUdIVCA9IDB4MjtcclxudmFyIEREU0RfV0lEVEggPSAweDQ7XHJcbnZhciBERFNEX1BJVENIID0gMHg4O1xyXG52YXIgRERTRF9QSVhFTEZPUk1BVCA9IDB4MTAwMDtcclxudmFyIEREU0RfTUlQTUFQQ09VTlQgPSAweDIwMDAwO1xyXG52YXIgRERTRF9MSU5FQVJTSVpFID0gMHg4MDAwMDtcclxudmFyIEREU0RfREVQVEggPSAweDgwMDAwMDtcclxuXHJcbnZhciBERFNDQVBTX0NPTVBMRVggPSAweDg7XHJcbnZhciBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwO1xyXG52YXIgRERTQ0FQU19URVhUVVJFID0gMHgxMDAwO1xyXG5cclxudmFyIEREU0NBUFMyX0NVQkVNQVAgPSAweDIwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVYID0gMHg0MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWCA9IDB4ODAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVkgPSAweDEwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWSA9IDB4MjAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVaID0gMHg0MDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVogPSAweDgwMDA7XHJcbnZhciBERFNDQVBTMl9WT0xVTUUgPSAweDIwMDAwMDtcclxuXHJcbnZhciBERFBGX0FMUEhBUElYRUxTID0gMHgxO1xyXG52YXIgRERQRl9BTFBIQSA9IDB4MjtcclxudmFyIEREUEZfRk9VUkNDID0gMHg0O1xyXG52YXIgRERQRl9SR0IgPSAweDQwO1xyXG52YXIgRERQRl9ZVVYgPSAweDIwMDtcclxudmFyIEREUEZfTFVNSU5BTkNFID0gMHgyMDAwMDtcclxuXHJcbmZ1bmN0aW9uIGZvdXJDQ1RvSW50MzIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KDApICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgxKSA8PCA4KSArXHJcbiAgICAgICAgKHZhbHVlLmNoYXJDb2RlQXQoMikgPDwgMTYpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgzKSA8PCAyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludDMyVG9Gb3VyQ0ModmFsdWUpIHtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxyXG4gICAgICAgIHZhbHVlICYgMHhmZixcclxuICAgICAgICAodmFsdWUgPj4gOCkgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAxNikgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAyNCkgJiAweGZmXHJcbiAgICApO1xyXG59XHJcblxyXG52YXIgaGVhZGVyTGVuZ3RoSW50ID0gMzE7IC8vIFRoZSBoZWFkZXIgbGVuZ3RoIGluIDMyIGJpdCBpbnRzXHJcblxyXG52YXIgRk9VUkNDX0RYVDEgPSBmb3VyQ0NUb0ludDMyKCdEWFQxJyk7XHJcbnZhciBGT1VSQ0NfRFhUMyA9IGZvdXJDQ1RvSW50MzIoJ0RYVDMnKTtcclxudmFyIEZPVVJDQ19EWFQ1ID0gZm91ckNDVG9JbnQzMignRFhUNScpO1xyXG4vLyBPZmZzZXRzIGludG8gdGhlIGhlYWRlciBhcnJheVxyXG52YXIgb2ZmX21hZ2ljID0gMDtcclxuXHJcbnZhciBvZmZfc2l6ZSA9IDE7XHJcbnZhciBvZmZfZmxhZ3MgPSAyO1xyXG52YXIgb2ZmX2hlaWdodCA9IDM7XHJcbnZhciBvZmZfd2lkdGggPSA0O1xyXG5cclxudmFyIG9mZl9taXBtYXBDb3VudCA9IDc7XHJcblxyXG52YXIgb2ZmX3BmRmxhZ3MgPSAyMDtcclxudmFyIG9mZl9wZkZvdXJDQyA9IDIxO1xyXG5cclxudmFyIG9mZl9jYXBzID0gMjc7XHJcbnZhciBvZmZfY2FwczIgPSAyODtcclxudmFyIG9mZl9jYXBzMyA9IDI5O1xyXG52YXIgb2ZmX2NhcHM0ID0gMzA7XHJcblxyXG52YXIgcmV0ID0ge1xyXG4gICAgcGFyc2U6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCBvdXQpIHtcclxuICAgICAgICB2YXIgaGVhZGVyID0gbmV3IEludDMyQXJyYXkoYXJyYXlCdWZmZXIsIDAsIGhlYWRlckxlbmd0aEludCk7XHJcbiAgICAgICAgaWYgKGhlYWRlcltvZmZfbWFnaWNdICE9PSBERFNfTUFHSUMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGVhZGVyKG9mZl9wZkZsYWdzKSAmIEREUEZfRk9VUkNDKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZvdXJDQyA9IGhlYWRlcihvZmZfcGZGb3VyQ0MpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IGhlYWRlcltvZmZfd2lkdGhdO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBoZWFkZXJbb2ZmX2hlaWdodF07XHJcbiAgICAgICAgdmFyIGlzQ3ViZU1hcCA9IGhlYWRlcltvZmZfY2FwczJdICYgRERTQ0FQUzJfQ1VCRU1BUDtcclxuICAgICAgICB2YXIgaGFzTWlwbWFwID0gaGVhZGVyW29mZl9mbGFnc10gJiBERFNEX01JUE1BUENPVU5UO1xyXG4gICAgICAgIHZhciBibG9ja0J5dGVzLCBpbnRlcm5hbEZvcm1hdDtcclxuICAgICAgICBzd2l0Y2goZm91ckNDKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDE6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gODtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDM6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUNTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhT2Zmc2V0ID0gaGVhZGVyW29mZl9zaXplXSArIDQ7XHJcbiAgICAgICAgLy8gVE9ETzogU3VwcG9zZSBhbGwgZmFjZSBhcmUgZXhpc3RlZFxyXG4gICAgICAgIHZhciBmYWNlTnVtYmVyID0gaXNDdWJlTWFwID8gNiA6IDE7XHJcbiAgICAgICAgdmFyIG1pcG1hcENvdW50ID0gMTtcclxuICAgICAgICBpZiAoaGFzTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3VudF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBmYWNlTnVtYmVyOyBmKyspIHtcclxuICAgICAgICAgICAgdmFyIF93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB2YXIgX2hlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0gPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBfd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGludGVybmFsRm9ybWF0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgbWlwbWFwcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhTGVuZ3RoID0gTWF0aC5tYXgoNCwgX3dpZHRoKSAvIDQgKiBNYXRoLm1heCg0LCBfaGVpZ2h0KSAvIDQgKiBibG9ja0J5dGVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IGRhdGFMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBfd2lkdGggKj0gMC41O1xyXG4gICAgICAgICAgICAgICAgX2hlaWdodCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBtaXBtYXBzW2ldID0gYnl0ZUFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmVzW2ZdLnBpeGVscyA9IG1pcG1hcHNbMF07XHJcbiAgICAgICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzW2ZdLm1pcG1hcHMgPSBtaXBtYXBzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyByZXR1cm4gaXNDdWJlTWFwID8gdGV4dHVyZXMgOiB0ZXh0dXJlc1swXTtcclxuICAgICAgICBpZiAob3V0KSB7XHJcbiAgICAgICAgICAgIG91dC53aWR0aCA9IHRleHR1cmVzWzBdLndpZHRoO1xyXG4gICAgICAgICAgICBvdXQuaGVpZ2h0ID0gdGV4dHVyZXNbMF0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBvdXQuZm9ybWF0ID0gdGV4dHVyZXNbMF0uZm9ybWF0O1xyXG4gICAgICAgICAgICBvdXQucGl4ZWxzID0gdGV4dHVyZXNbMF0ucGl4ZWxzO1xyXG4gICAgICAgICAgICBvdXQubWlwbWFwcyA9IHRleHR1cmVzWzBdLm1pcG1hcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG52YXIgdG9DaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcclxuXHJcbnZhciBNSU5FTEVOID0gODtcclxudmFyIE1BWEVMRU4gPSAweDdmZmY7XHJcbmZ1bmN0aW9uIHJnYmUyZmxvYXQocmdiZSwgYnVmZmVyLCBvZmZzZXQsIGV4cG9zdXJlKSB7XHJcbiAgICBpZiAocmdiZVszXSA+IDApIHtcclxuICAgICAgICB2YXIgZiA9IE1hdGgucG93KDIuMCwgcmdiZVszXSAtIDEyOCAtIDggKyBleHBvc3VyZSk7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDBdID0gcmdiZVswXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gcmdiZVsxXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gcmdiZVsyXSAqIGY7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSAwO1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gMDtcclxuICAgIH1cclxuICAgIGJ1ZmZlcltvZmZzZXQgKyAzXSA9IDEuMDtcclxuICAgIHJldHVybiBidWZmZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVpbnQ4MnN0cmluZyhhcnJheSwgb2Zmc2V0LCBzaXplKSB7XHJcbiAgICB2YXIgc3RyID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgc3RyICs9IHRvQ2hhcihhcnJheVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5cmdiZShzLCB0KSB7XHJcbiAgICB0WzBdID0gc1swXTtcclxuICAgIHRbMV0gPSBzWzFdO1xyXG4gICAgdFsyXSA9IHNbMl07XHJcbiAgICB0WzNdID0gc1szXTtcclxufVxyXG5cclxuLy8gVE9ETyA6IGNoZWNrXHJcbmZ1bmN0aW9uIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIHZhciByc2hpZnQgPSAwLCB4ID0gMCwgbGVuID0geG1heDtcclxuICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcbiAgICAgICAgc2Nhblt4XVswXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsyXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVszXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgaWYgKHNjYW5beF1bMF0gPT09IDEgJiYgc2Nhblt4XVsxXSA9PT0gMSAmJiBzY2FuW3hdWzJdID09PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGV4cCBpcyBjb3VudCBvZiByZXBlYXRlZCBwaXhlbHNcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IChzY2FuW3hdWzNdIDw8IHJzaGlmdCkgPj4+IDA7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvcHlyZ2JlKHNjYW5beC0xXSwgc2Nhblt4XSk7XHJcbiAgICAgICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByc2hpZnQgKz0gODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICByc2hpZnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIGlmICgoeG1heCA8IE1JTkVMRU4pIHwgKHhtYXggPiBNQVhFTEVOKSkge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0LCB4bWF4KTtcclxuICAgIH1cclxuICAgIHZhciBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmIChpICE9IDIpIHtcclxuICAgICAgICByZXR1cm4gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCAtIDEsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgc2NhblswXVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICBzY2FuWzBdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuXHJcbiAgICBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmICgoKChzY2FuWzBdWzJdIDw8IDgpID4+PiAwKSB8IGkpID4+PiAwICE9PSB4bWF4KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgeG1heDspIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA+IDEyOCkge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IChjb2RlICYgMTI3KSA+Pj4gMDtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2FuW3grK11baV0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICAvLyBodHRwOi8vd3d3LmdyYXBoaWNzLmNvcm5lbGwuZWR1L35iancvcmdiZS5odG1sXHJcbiAgICAvLyBCbGVuZGVyIHNvdXJjZVxyXG4gICAgLy8gaHR0cDovL3JhZHNpdGUubGJsLmdvdi9yYWRpYW5jZS9yZWZlci9Ob3Rlcy9waWN0dXJlX2Zvcm1hdC5odG1sXHJcbiAgICBwYXJzZVJHQkU6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCB0ZXh0dXJlLCBleHBvc3VyZSkge1xyXG4gICAgICAgIGlmIChleHBvc3VyZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICAgICAgdmFyIHNpemUgPSBkYXRhLmxlbmd0aDtcclxuICAgICAgICBpZiAodWludDgyc3RyaW5nKGRhdGEsIDAsIDIpICE9PSAnIz8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCBlbXB0eSBsaW5lLCBuZXh0IGxpbmUgaXMgcmVzb2x1dGlvbiBpbmZvXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRvQ2hhcihkYXRhW2ldKSA9PT0gJ1xcbicgJiYgdG9DaGFyKGRhdGFbaSsxXSkgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA+PSBzaXplKSB7IC8vIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbmQgcmVzb2x1dGlvbiBpbmZvIGxpbmVcclxuICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgdmFyIHN0ciA9ICcnO1xyXG4gICAgICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBfY2hhciA9IHRvQ2hhcihkYXRhW2ldKTtcclxuICAgICAgICAgICAgaWYgKF9jaGFyID09PSAnXFxuJykge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RyICs9IF9jaGFyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAtWSBNICtYIE5cclxuICAgICAgICB2YXIgdG1wID0gc3RyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KHRtcFsxXSk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcGFyc2VJbnQodG1wWzNdKTtcclxuICAgICAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVhZCBhbmQgZGVjb2RlIGFjdHVhbCBkYXRhXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGkrMTtcclxuICAgICAgICB2YXIgc2NhbmxpbmUgPSBbXTtcclxuICAgICAgICAvLyBtZW16ZXJvXHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcbiAgICAgICAgICAgIHNjYW5saW5lW3hdID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FubGluZVt4XVtqXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgb2Zmc2V0MiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZENvbG9ycyhzY2FubGluZSwgZGF0YSwgb2Zmc2V0LCB3aWR0aCk7XHJcbiAgICAgICAgICAgIGlmICghb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHJnYmUyZmxvYXQoc2NhbmxpbmVbeF0sIHBpeGVscywgb2Zmc2V0MiwgZXhwb3N1cmUpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0MiArPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRleHR1cmUucGl4ZWxzID0gcGl4ZWxzO1xyXG4gICAgICAgIC8vIEhBTEZfRkxPQVQgY2FuJ3QgdXNlIEZsb2F0MzJBcnJheVxyXG4gICAgICAgIHRleHR1cmUudHlwZSA9IFRleHR1cmUuRkxPQVQ7XHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhcnNlUkdCRUZyb21QTkc6IGZ1bmN0aW9uKHBuZykge1xyXG5cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHJldDtcclxuIiwiaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwUGFzcyBmcm9tICcuLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5cclxuaW1wb3J0IGRkcyBmcm9tICcuL2Rkcyc7XHJcbmltcG9ydCBoZHIgZnJvbSAnLi9oZHInO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudGV4dHVyZVxyXG4gKi9cclxudmFyIHRleHR1cmVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8b2JqZWN0fSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9IFtvcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uc3VjY2Vzc11cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25lcnJvcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZX1cclxuICAgICAqL1xyXG4gICAgbG9hZFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlO1xyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mKHBhdGgpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAocGF0aC5tYXRjaCgvLmhkciQvKSB8fCBvcHRpb24uZmlsZVR5cGUgPT09ICdoZHInKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNSR0I6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVVdGlsLl9mZXRjaFRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZHIucGFyc2VSR0JFKGRhdGEsIHRleHR1cmUsIG9wdGlvbi5leHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2Vzcyh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLm1hdGNoKC8uZGRzJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2RkcycpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkcy5wYXJzZShkYXRhLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3Mob25zdWNjZXNzKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmIHR5cGVvZihwYXRoLnB4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKG9uZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkIGEgcGFub3JhbWEgdGV4dHVyZSBhbmQgcmVuZGVyIGl0IHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb24uZW5jb2RlUkdCTV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW29wdGlvbi5leHBvc3VyZV1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICovXHJcbiAgICBsb2FkUGFub3JhbWE6IGZ1bmN0aW9uIChyZW5kZXJlciwgcGF0aCwgY3ViZU1hcCwgb3B0aW9uLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZVV0aWwubG9hZFRleHR1cmUocGF0aCwgb3B0aW9uLCBmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHRleHR1cmUuZmxpcFkgPSBvcHRpb24uZmxpcFkgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGYucGFub3JhbWFUb0N1YmVNYXAocmVuZGVyZXIsIHRleHR1cmUsIGN1YmVNYXAsIG9wdGlvbik7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoY3ViZU1hcCk7XHJcbiAgICAgICAgfSwgb25lcnJvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgcGFub3JhbWEgdGV4dHVyZSB0byBhIGN1YmUgbWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IHBhbm9yYW1hTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvblxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICovXHJcbiAgICBwYW5vcmFtYVRvQ3ViZU1hcDogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYW5vcmFtYU1hcCwgY3ViZU1hcCwgb3B0aW9uKSB7XHJcbiAgICAgICAgdmFyIGVudmlyb25tZW50TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3MoKTtcclxuICAgICAgICB2YXIgc2t5ZG9tZSA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IG5ldyBTY2VuZSgpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2t5ZG9tZS5zZXRFbnZpcm9ubWVudE1hcChwYW5vcmFtYU1hcCk7XHJcblxyXG4gICAgICAgIG9wdGlvbiA9IG9wdGlvbiB8fCB7fTtcclxuICAgICAgICBpZiAob3B0aW9uLmVuY29kZVJHQk0pIHtcclxuICAgICAgICAgICAgc2t5ZG9tZS5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaGFyZSBzUkdCXHJcbiAgICAgICAgY3ViZU1hcC5zUkdCID0gcGFub3JhbWFNYXAuc1JHQjtcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBjdWJlTWFwO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNreWRvbWUuc2NlbmUpO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgcmV0dXJuIGN1YmVNYXA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRUb05vcm1hbDogZnVuY3Rpb24gKGltYWdlLCBjaGVja0J1bXApIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGNoZWNrQnVtcCA9IGNoZWNrQnVtcCB8fCBmYWxzZTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgdmFyIGRzdERhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjRGF0YS5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVja0J1bXApIHtcclxuICAgICAgICAgICAgICAgIHZhciByID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhyIC0gZykgKyBNYXRoLmFicyhnIC0gYik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA+IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHaXZlbiBpbWFnZSBpcyBub3QgYSBoZWlnaHQgbWFwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIE1vZGlmaWVkIGZyb20gaHR0cDovL21yZG9vYi5jb20vbGFiL2phdmFzY3JpcHQvaGVpZ2h0Mm5vcm1hbC9cclxuICAgICAgICAgICAgdmFyIHgxLCB5MSwgeDIsIHkyO1xyXG4gICAgICAgICAgICBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZWZ0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgJSAod2lkdGggKiA0KSA9PT0gKHdpZHRoIC0gMSkgKiA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyByaWdodCBlZGdlXHJcbiAgICAgICAgICAgICAgICB4MSA9IHNyY0RhdGEuZGF0YVtpIC0gNF07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2kgKyA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGkgPCB3aWR0aCAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvcCBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPiB3aWR0aCAqIChoZWlnaHQgLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeTEgPSBzcmNEYXRhLmRhdGFbaSAtIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgICAgICB5MiA9IHNyY0RhdGEuZGF0YVtpICsgd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2ldID0gKHgxIC0geDIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDFdID0gKHkxIC0geTIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDJdID0gMjU1O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDNdID0gMjU1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGRzdERhdGEsIDAsIDApO1xyXG4gICAgICAgIHJldHVybiBjYW52YXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGhyZXNob2xkPTIwXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGlzSGVpZ2h0SW1hZ2U6IGZ1bmN0aW9uIChpbWcsIGRvd25TY2FsZVNpemUsIHRocmVzaG9sZCkge1xyXG4gICAgICAgIGlmICghaW1nIHx8ICFpbWcud2lkdGggfHwgIWltZy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRvd25TY2FsZVNpemUgfHwgMzI7XHJcbiAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIHx8IDIwO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIHZhciBnID0gc3JjRGF0YS5kYXRhW2kgKyAxXTtcclxuICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgaWYgKGRpZmYgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2ZldGNoVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgb25lcnJvcjogb25lcnJvclxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGNoZXNzYm9hcmQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbc2l6ZV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3VuaXRTaXplXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IxXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNoZXNzYm9hcmQ6IGZ1bmN0aW9uIChzaXplLCB1bml0U2l6ZSwgY29sb3IxLCBjb2xvcjIpIHtcclxuICAgICAgICBzaXplID0gc2l6ZSB8fCA1MTI7XHJcbiAgICAgICAgdW5pdFNpemUgPSB1bml0U2l6ZSB8fCA2NDtcclxuICAgICAgICBjb2xvcjEgPSBjb2xvcjEgfHwgJ2JsYWNrJztcclxuICAgICAgICBjb2xvcjIgPSBjb2xvcjIgfHwgJ3doaXRlJztcclxuXHJcbiAgICAgICAgdmFyIHJlcGVhdCA9IE1hdGguY2VpbChzaXplIC8gdW5pdFNpemUpO1xyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gc2l6ZTtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcblxyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcGVhdDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNGaWxsID0gaiAlIDIgPyAoaSAlIDIpIDogKGkgJSAyIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KGkgKiB1bml0U2l6ZSwgaiAqIHVuaXRTaXplLCB1bml0U2l6ZSwgdW5pdFNpemUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzLFxyXG4gICAgICAgICAgICBhbmlzb3Ryb3BpYzogOFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBibGFuayBwdXJlIGNvbG9yIDF4MSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNvbG9yXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQmxhbms6IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSAxO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XHJcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdGV4dHVyZVV0aWw7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxEaXN0cmlidXRpb247XFxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZSA6IFs1MTIsIDI1Nl07XFxuY29uc3QgdmVjMyBOID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcXG5jb25zdCBmbG9hdCBmU2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxudmVjMyBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0IGksIGZsb2F0IHJvdWdobmVzcywgdmVjMyBOKSB7XFxuIHZlYzMgSCA9IHRleHR1cmUyRChub3JtYWxEaXN0cmlidXRpb24sIHZlYzIocm91Z2huZXNzLCBpKSkucmdiO1xcbiB2ZWMzIHVwVmVjdG9yID0gYWJzKE4ueSkgPiAwLjk5OSA/IHZlYzMoMS4wLCAwLjAsIDAuMCkgOiB2ZWMzKDAuMCwgMS4wLCAwLjApO1xcbiB2ZWMzIHRhbmdlbnRYID0gbm9ybWFsaXplKGNyb3NzKE4sIHVwVmVjdG9yKSk7XFxuIHZlYzMgdGFuZ2VudFogPSBjcm9zcyhOLCB0YW5nZW50WCk7XFxuIHJldHVybiBub3JtYWxpemUodGFuZ2VudFggKiBILnggKyBOICogSC55ICsgdGFuZ2VudFogKiBILnopO1xcbn1cXG5mbG9hdCBHX1NtaXRoKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gTm9WIC8gKE5vViAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBOb0wgLyAoTm9MICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHZpZXdwb3J0U2l6ZTtcXG4gZmxvYXQgTm9WID0gdXYueDtcXG4gZmxvYXQgcm91Z2huZXNzID0gdXYueTtcXG4gdmVjMyBWO1xcbiBWLnggPSBzcXJ0KDEuMCAtIE5vViAqIE5vVik7XFxuIFYueSA9IDAuMDtcXG4gVi56ID0gTm9WO1xcbiBmbG9hdCBBID0gMC4wO1xcbiBmbG9hdCBCID0gMC4wO1xcbiBmb3IgKGludCBpID0gMDsgaSA8IFNBTVBMRV9OVU1CRVI7IGkrKykge1xcbiB2ZWMzIEggPSBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0KGkpIC8gZlNhbXBsZU51bWJlciwgcm91Z2huZXNzLCBOKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuIGZsb2F0IE5vTCA9IGNsYW1wKEwueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBOb0ggPSBjbGFtcChILnosIDAuMCwgMS4wKTtcXG4gZmxvYXQgVm9IID0gY2xhbXAoZG90KFYsIEgpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gZmxvYXQgRyA9IEdfU21pdGgocm91Z2huZXNzLCBOb1YsIE5vTCk7XFxuIGZsb2F0IEdfVmlzID0gRyAqIFZvSCAvIChOb0ggKiBOb1YpO1xcbiBmbG9hdCBGYyA9IHBvdygxLjAgLSBWb0gsIDUuMCk7XFxuIEEgKz0gKDEuMCAtIEZjKSAqIEdfVmlzO1xcbiBCICs9IEZjICogR19WaXM7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzIoQSwgQikgLyBmU2FtcGxlTnVtYmVyLCAwLjAsIDEuMCk7XFxufVxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIiNkZWZpbmUgU0hBREVSX05BTUUgcHJlZmlsdGVyXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiB2ZWMzIE4gPSBWO1xcbiB2ZWMzIHByZWZpbHRlcmVkQ29sb3IgPSB2ZWMzKDAuMCk7XFxuIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wO1xcbiBmbG9hdCBmTWF4U2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmTWF4U2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gcHJlZmlsdGVyZWRDb2xvciArPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2IgKiBOb0w7XFxuIHRvdGFsV2VpZ2h0ICs9IE5vTDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KHByZWZpbHRlcmVkQ29sb3IgLyB0b3RhbFdlaWdodCwgMS4wKSk7XFxufVxcblwiO1xyXG4iLCIvLyBDdWJlbWFwIHByZWZpbHRlciB1dGlsaXR5XHJcbi8vIGh0dHA6Ly93d3cudW5yZWFsZW5naW5lLmNvbS9maWxlcy9kb3dubG9hZHMvMjAxM1NpZ2dyYXBoUHJlc2VudGF0aW9uc05vdGVzLnBkZlxyXG4vLyBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMy9ncHVnZW1zM19jaDIwLmh0bWxcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdGV4dHVyZSc7XHJcblxyXG5pbXBvcnQgaW50ZWdyYXRlQlJERlNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvaW50ZWdyYXRlQlJERi5nbHNsLmpzJztcclxuaW1wb3J0IHByZWZpbHRlckZyYWdDb2RlIGZyb20gJy4vc2hhZGVyL3ByZWZpbHRlci5nbHNsLmpzJztcclxuXHJcbnZhciBjdWJlbWFwVXRpbCA9IHt9O1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBUT0RPIERvd25zYW1wbGVcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkudXRpbC5jdWJlbWFwLnByZWZpbHRlckVudmlyb25tZW50TWFwXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy53aWR0aD02NF1cclxuICogQHBhcmFtICB7bnVtYmVyfSBbdGV4dHVyZU9wdHMuaGVpZ2h0PTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy50eXBlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZW5jb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk09ZmFsc2VdXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbbm9ybWFsRGlzdHJpYnV0aW9uXVxyXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gW2JyZGZMb29rdXBdXHJcbiAqL1xyXG5jdWJlbWFwVXRpbC5wcmVmaWx0ZXJFbnZpcm9ubWVudE1hcCA9IGZ1bmN0aW9uIChcclxuICAgIHJlbmRlcmVyLCBlbnZNYXAsIHRleHR1cmVPcHRzLCBub3JtYWxEaXN0cmlidXRpb24sIGJyZGZMb29rdXBcclxuKSB7XHJcbiAgICAvLyBOb3QgY3JlYXRlIG90aGVyIHJlbmRlcmVyLCBpdCBpcyBlYXN5IGhhdmluZyBpc3N1ZSBvZiBjcm9zcyByZWZlcmVuY2Ugb2YgcmVzb3VyY2VzIGxpa2UgZnJhbWVidWZmZXJcclxuICAgIC8vIFBFTkRJTkcgcHJlc2VydmVEcmF3aW5nQnVmZmVyP1xyXG4gICAgaWYgKCFicmRmTG9va3VwIHx8ICFub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgIGJyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGV4dHVyZU9wdHMgPSB0ZXh0dXJlT3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgd2lkdGggPSB0ZXh0dXJlT3B0cy53aWR0aCB8fCA2NDtcclxuICAgIHZhciBoZWlnaHQgPSB0ZXh0dXJlT3B0cy5oZWlnaHQgfHwgNjQ7XHJcblxyXG4gICAgdmFyIHRleHR1cmVUeXBlID0gdGV4dHVyZU9wdHMudHlwZSB8fCBlbnZNYXAudHlwZTtcclxuXHJcbiAgICAvLyBVc2Ugc2FtZSB0eXBlIHdpdGggZ2l2ZW4gZW52TWFwXHJcbiAgICB2YXIgcHJlZmlsdGVyZWRDdWJlTWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUsXHJcbiAgICAgICAgZmxpcFk6IGZhbHNlLFxyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXByZWZpbHRlcmVkQ3ViZU1hcC5pc1Bvd2VyT2ZUd28oKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignV2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIHR3byB0byBlbmFibGUgbWlwbWFwLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzaXplID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XHJcbiAgICB2YXIgbWlwbWFwTnVtID0gTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygyKSArIDE7XHJcblxyXG4gICAgdmFyIHByZWZpbHRlck1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICB2ZXJ0ZXg6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLFxyXG4gICAgICAgICAgICBmcmFnbWVudDogcHJlZmlsdGVyRnJhZ0NvZGVcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICBwcmVmaWx0ZXJNYXRlcmlhbC5zZXQoJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcblxyXG4gICAgdGV4dHVyZU9wdHMuZW5jb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICB0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuXHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNreUVudjtcclxuXHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIC8vIENvbnZlcnQgcGFub3JhbWEgdG8gY3ViZW1hcFxyXG4gICAgICAgIHZhciBlbnZDdWJlbWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgLy8gRklYTUUgRkxPQVQgdHlwZSB3aWxsIGNhdXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCBlcnJvciBvbiBpT1NcclxuICAgICAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUgPT09IFRleHR1cmUuRkxPQVQgP1xyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5IQUxGX0ZMT0FUIDogdGV4dHVyZVR5cGVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0ZXh0dXJlVXRpbC5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgZW52TWFwLCBlbnZDdWJlbWFwLCB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgZW5jb2RlUkdCTSBzbyBpdCBjYW4gYmUgZGVjb2RlZCBhcyBSR0JNXHJcbiAgICAgICAgICAgIGVuY29kZVJHQk06IHRleHR1cmVPcHRzLmRlY29kZVJHQk1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnZNYXAgPSBlbnZDdWJlbWFwO1xyXG4gICAgfVxyXG4gICAgc2t5RW52ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IHByZWZpbHRlck1hdGVyaWFsXHJcbiAgICB9KTtcclxuICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHByZWZpbHRlcmVkQ3ViZU1hcFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRm9yY2UgdG8gYmUgVU5TSUdORURfQllURVxyXG4gICAgaWYgKHRleHR1cmVPcHRzLmVuY29kZVJHQk0pIHtcclxuICAgICAgICB0ZXh0dXJlVHlwZSA9IHByZWZpbHRlcmVkQ3ViZU1hcC50eXBlID0gVGV4dHVyZS5VTlNJR05FRF9CWVRFO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZW5kZXJUYXJnZXRUbXAgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGVcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IHZlbmRvclt0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5VTlNJR05FRF9CWVRFID8gJ1VpbnQ4QXJyYXknIDogJ0Zsb2F0MzJBcnJheSddO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBtYXBOdW07IGkrKykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZSgncHJlZmlsdGVyJyk7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0gPSB7XHJcbiAgICAgICAgICAgIHBpeGVsczoge31cclxuICAgICAgICB9O1xyXG4gICAgICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIGkgLyAobWlwbWFwTnVtIC0gMSkpO1xyXG5cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRhcmdldHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBBcnJheUN0b3IocmVuZGVyVGFyZ2V0VG1wLndpZHRoICogcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAqIDQpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gocmVuZGVyVGFyZ2V0VG1wKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tqXSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mb3YgPSBmb3Y7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihkdW1teVNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAgICAgMCwgMCwgcmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCB0ZXh0dXJlVHlwZSwgcGl4ZWxzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIC8vIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgLy8gY2FudmFzLndpZHRoID0gcmVuZGVyVGFyZ2V0VG1wLndpZHRoO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMuaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0VG1wLmhlaWdodDtcclxuICAgICAgICAgICAgLy8gdmFyIGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEocmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0KTtcclxuICAgICAgICAgICAgLy8gZm9yICh2YXIgayA9IDA7IGsgPCBwaXhlbHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgLy8gICAgIGltYWdlRGF0YS5kYXRhW2tdID0gcGl4ZWxzW2tdO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcclxuICAgICAgICAgICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0ucGl4ZWxzW3RhcmdldHNbal1dID0gcGl4ZWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLndpZHRoIC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAvPSAyO1xyXG4gICAgICAgIHJlbmRlclRhcmdldFRtcC5kaXJ0eSgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZUVuZCgncHJlZmlsdGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZW5kZXJUYXJnZXRUbXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBza3lFbnYuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAvLyBSZW1vdmUgZ3B1IHJlc291cmNlIGFsbHVjYXRlZCBpbiByZW5kZXJlclxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIC8vIHJlbmRlcmVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwOiBwcmVmaWx0ZXJlZEN1YmVNYXAsXHJcbiAgICAgICAgYnJkZkxvb2t1cDogYnJkZkxvb2t1cCxcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb246IG5vcm1hbERpc3RyaWJ1dGlvbixcclxuICAgICAgICBtYXhNaXBtYXBMZXZlbDogbWlwbWFwTnVtXHJcbiAgICB9O1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERiA9IGZ1bmN0aW9uIChyZW5kZXJlciwgbm9ybWFsRGlzdHJpYnV0aW9uKSB7XHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24gPSBub3JtYWxEaXN0cmlidXRpb24gfHwgY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgIHZhciBmcmFtZWJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcih7XHJcbiAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHZhciBwYXNzID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogNTEyLFxyXG4gICAgICAgIGhlaWdodDogMjU2LFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ3ZpZXdwb3J0U2l6ZScsIFs1MTIsIDI1Nl0pO1xyXG4gICAgcGFzcy5hdHRhY2hPdXRwdXQodGV4dHVyZSk7XHJcbiAgICBwYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVidWZmZXIpO1xyXG5cclxuICAgIC8vIEZJWE1FIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IGNhbiByZWFkUGl4ZWxzIHdpdGggZmxvYXQgdHlwZS5cclxuICAgIC8vIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgLy8gdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoNTEyICogMjU2ICogNCk7XHJcbiAgICAvLyByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgLy8gICAgIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LFxyXG4gICAgLy8gICAgIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzXHJcbiAgICAvLyApO1xyXG4gICAgLy8gdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAvLyB0ZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAvLyB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAvLyBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0dXJlO1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24gPSBmdW5jdGlvbiAocm91Z2huZXNzTGV2ZWxzLCBzYW1wbGVTaXplKSB7XHJcblxyXG4gICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAvLyBHTFNMIG5vdCBzdXBwb3J0IGJpdCBvcGVyYXRpb24sIHVzZSBsb29rdXAgaW5zdGVhZFxyXG4gICAgLy8gViAtPiBpIC8gTiwgVSAtPiByb3VnaG5lc3NcclxuICAgIHZhciByb3VnaG5lc3NMZXZlbHMgPSByb3VnaG5lc3NMZXZlbHMgfHwgMjU2O1xyXG4gICAgdmFyIHNhbXBsZVNpemUgPSBzYW1wbGVTaXplIHx8IDEwMjQ7XHJcblxyXG4gICAgdmFyIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiByb3VnaG5lc3NMZXZlbHMsXHJcbiAgICAgICAgaGVpZ2h0OiBzYW1wbGVTaXplLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHVzZU1pcG1hcDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2FtcGxlU2l6ZSAqIHJvdWdobmVzc0xldmVscyAqIDQpO1xyXG4gICAgdmFyIHRtcCA9IFtdO1xyXG5cclxuICAgIC8vIGZ1bmN0aW9uIHNvcnRGdW5jKGEsIGIpIHtcclxuICAgIC8vICAgICByZXR1cm4gTWF0aC5hYnMoYikgLSBNYXRoLmFicyhhKTtcclxuICAgIC8vIH1cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm91Z2huZXNzTGV2ZWxzOyBqKyspIHtcclxuICAgICAgICB2YXIgcm91Z2huZXNzID0gaiAvIHJvdWdobmVzc0xldmVscztcclxuICAgICAgICB2YXIgYSA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9CaXR3aXNlX09wZXJhdG9yc1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE5MDg0OTIvdW5zaWduZWQtaW50ZWdlci1pbi1qYXZhc2NyaXB0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyMjM1MC93aGF0LWlzLXRoZS1qYXZhc2NyaXB0LW9wZXJhdG9yLWFuZC1ob3ctZG8teW91LXVzZS1pdFxyXG4gICAgICAgICAgICB2YXIgeSA9IChpIDw8IDE2IHwgaSA+Pj4gMTYpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgMTQzMTY1NTc2NSkgPDwgMSB8ICh5ICYgMjg2MzMxMTUzMCkgPj4+IDEpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgODU4OTkzNDU5KSA8PCAyIHwgKHkgJiAzNDM1OTczODM2KSA+Pj4gMikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAyNTI2NDUxMzUpIDw8IDQgfCAoeSAmIDQwNDIzMjIxNjApID4+PiA0KSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoKHkgJiAxNjcxMTkzNSkgPDwgOCB8ICh5ICYgNDI3ODI1NTM2MCkgPj4+IDgpID4+PiAwKSAvIDQyOTQ5NjcyOTY7XHJcblxyXG4gICAgICAgICAgICAvLyBDREZcclxuICAgICAgICAgICAgdmFyIGNvc1RoZXRhID0gTWF0aC5zcXJ0KCgxIC0geSkgLyAoMSArIChhICogYSAtIDEuMCkgKiB5KSk7XHJcbiAgICAgICAgICAgIHRtcFtpXSA9IGNvc1RoZXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IChpICogcm91Z2huZXNzTGV2ZWxzICsgaikgKiA0O1xyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSB0bXBbaV07XHJcbiAgICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NUaGV0YSAqIGNvc1RoZXRhKTtcclxuICAgICAgICAgICAgdmFyIHggPSBpIC8gc2FtcGxlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHBoaSA9IDIuMCAqIE1hdGguUEkgKiB4O1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0XSA9IHNpblRoZXRhICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDFdID0gY29zVGhldGE7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXQgKyAyXSA9IHNpblRoZXRhICogTWF0aC5zaW4ocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbi5waXhlbHMgPSBwaXhlbHM7XHJcblxyXG4gICAgcmV0dXJuIG5vcm1hbERpc3RyaWJ1dGlvbjtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGN1YmVtYXBVdGlsO1xyXG4iLCIvLyBodHRwczovL2RvY3MudW5yZWFsZW5naW5lLmNvbS9sYXRlc3QvSU5UL0VuZ2luZS9SZW5kZXJpbmcvTGlnaHRpbmdBbmRTaGFkb3dzL0FtYmllbnRDdWJlbWFwL1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgY3ViZW1hcFV0aWwgZnJvbSAnLi4vdXRpbC9jdWJlbWFwJztcclxuXHJcbi8qKlxyXG4gKiBBbWJpZW50IGN1YmVtYXAgbGlnaHQgcHJvdmlkZXMgc3BlY3VsYXIgcGFydHMgb2YgSW1hZ2UgQmFzZWQgTGlnaHRpbmcuXHJcbiAqIFdoaWNoIGlzIGEgYmFzaWMgcmVxdWlyZW1lbnQgZm9yIFBoeXNpY2FsbHkgQmFzZWQgUmVuZGVyaW5nXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50Q3ViZW1hcExpZ2h0ID0gTGlnaHQuZXh0ZW5kKHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXAjXHJcbiAgICAgKi9cclxuICAgIGN1YmVtYXA6IG51bGwsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgLy8gcmFuZ2U6IDEwMCxcclxuXHJcbiAgICBjYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICBfbm9ybWFsRGlzdHJpYnV0aW9uOiBudWxsLFxyXG4gICAgX2JyZGZMb29rdXA6IG51bGxcclxuXHJcbn0sIC8qKiBAbGVuZHMgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCMgKi8ge1xyXG5cclxuICAgIHR5cGU6ICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG8gcHJlZml0ZXJpbmcgdGhlIGN1YmVtYXBcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0zMl1cclxuICAgICAqL1xyXG4gICAgcHJlZmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICBpZiAoIXJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJykpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXZpY2Ugbm90IHN1cHBvcnQgdGV4dHVyZUN1YmVMb2RFWFQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX2JyZGZMb29rdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uID0gY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdWJlbWFwID0gdGhpcy5jdWJlbWFwO1xyXG4gICAgICAgIGlmIChjdWJlbWFwLl9fcHJlZmlsdGVyZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwKFxyXG4gICAgICAgICAgICByZW5kZXJlciwgY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgZW5jb2RlUkdCTTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplXHJcbiAgICAgICAgICAgIH0sIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbiwgdGhpcy5fYnJkZkxvb2t1cFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwID0gcmVzdWx0LmVudmlyb25tZW50TWFwO1xyXG4gICAgICAgIHRoaXMuY3ViZW1hcC5fX3ByZWZpbHRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY3ViZW1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QlJERkxvb2t1cDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmRmTG9va3VwO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5jdWJlbWFwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXA6IHtcclxuICAgICAgICAgICAgdHlwZTogJ3QnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX2JyZGZMb29rdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudEN1YmVtYXB9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRDdWJlbWFwTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIFNwaGVyaWNhbCBIYXJtb25pYyBBbWJpZW50IExpZ2h0XHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRTSFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgQW1iaWVudFNITGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BoZXJpY2FsIEhhcm1vbmljIENvZWZmaWNpZW50c1xyXG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudFNII1xyXG4gICAgICovXHJcbiAgICBjb2VmZmljaWVudHM6IFtdLFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY29lZmZpY2llbnRzVG1wQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfU0hfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50U0hMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50czoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzVG1wQXJyID0gaW5zdGFuY2UuX2NvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdGFuY2UuY29lZmZpY2llbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29lZmZpY2llbnRzVG1wQXJyW2ldID0gaW5zdGFuY2UuY29lZmZpY2llbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRTSExpZ2h0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxudmFyIFRleHR1cmVQb29sID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG59O1xyXG5cclxuVGV4dHVyZVBvb2wucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBUZXh0dXJlUG9vbCxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0LnBvcCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHRleHR1cmUpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBsaXN0LnB1c2godGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzW2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb29sID0ge307XHJcbiAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgd3JhcFM6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgd3JhcFQ6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIGZsaXBZOiB0cnVlLFxyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2VcclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1Qcm9wTGlzdCA9IE9iamVjdC5rZXlzKGRlZmF1bHRQYXJhbXMpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkocGFyYW1ldGVycykge1xyXG4gICAgdXRpbC5kZWZhdWx0c1dpdGhQcm9wTGlzdChwYXJhbWV0ZXJzLCBkZWZhdWx0UGFyYW1zLCBkZWZhdWx0UGFyYW1Qcm9wTGlzdCk7XHJcbiAgICBmYWxsQmFjayhwYXJhbWV0ZXJzKTtcclxuXHJcbiAgICB2YXIga2V5ID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRQYXJhbVByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBkZWZhdWx0UGFyYW1Qcm9wTGlzdFtpXTtcclxuICAgICAgICB2YXIgY2h1bmsgPSBwYXJhbWV0ZXJzW25hbWVdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAga2V5ICs9IGNodW5rO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmFsbEJhY2sodGFyZ2V0KSB7XHJcblxyXG4gICAgdmFyIElQT1QgPSBpc1Bvd2VyT2ZUd28odGFyZ2V0LndpZHRoLCB0YXJnZXQuaGVpZ2h0KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0LmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgIHRhcmdldC51c2VNaXBtYXAgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUlQT1QgfHwgIXRhcmdldC51c2VNaXBtYXApIHtcclxuICAgICAgICBpZiAodGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlQT1QpIHtcclxuICAgICAgICB0YXJnZXQud3JhcFMgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB0YXJnZXQud3JhcFQgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNQb3dlck9mVHdvKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiAod2lkdGggJiAod2lkdGgtMSkpID09PSAwICYmXHJcbiAgICAgICAgICAgIChoZWlnaHQgJiAoaGVpZ2h0LTEpKSA9PT0gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZVBvb2w7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNtLmRlcHRoLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgPSB2ZWMyKDEuMCwgMS4wKTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgPSB2ZWMyKDAuMCwgMC4wKTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gdl9WaWV3UG9zaXRpb247XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVwdGguZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBiaWFzIDogMC4wMDE7XFxudW5pZm9ybSBmbG9hdCBzbG9wZVNjYWxlIDogMS4wO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gZmxvYXQgZGVwdGggPSB2X1ZpZXdQb3NpdGlvbi56IC8gdl9WaWV3UG9zaXRpb24udztcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuI2lmZGVmIFVTRV9WU01cXG4gZGVwdGggPSBkZXB0aCAqIDAuNSArIDAuNTtcXG4gZmxvYXQgbW9tZW50MSA9IGRlcHRoO1xcbiBmbG9hdCBtb21lbnQyID0gZGVwdGggKiBkZXB0aDtcXG4gI2lmZGVmIFNVUFBPUlRfU1RBTkRBUkRfREVSSVZBVElWRVNcXG4gZmxvYXQgZHggPSBkRmR4KGRlcHRoKTtcXG4gZmxvYXQgZHkgPSBkRmR5KGRlcHRoKTtcXG4gbW9tZW50MiArPSAwLjI1KihkeCpkeCtkeSpkeSk7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KG1vbWVudDEsIG1vbWVudDIsIDAuMCwgMS4wKTtcXG4jZWxzZVxcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBkZXB0aCArPSBzcXJ0KGR4KmR4ICsgZHkqZHkpICogc2xvcGVTY2FsZSArIGJpYXM7XFxuICNlbHNlXFxuIGRlcHRoICs9IGJpYXM7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkZXB0aCAqIDAuNSArIDAuNSk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVidWdfZGVwdGhcXG51bmlmb3JtIHNhbXBsZXIyRCBkZXB0aE1hcDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKGRlcHRoTWFwLCB2X1RleGNvb3JkKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleC5yZ2IsIDEuMCk7XFxuI2Vsc2VcXG4gZmxvYXQgZGVwdGggPSBkZWNvZGVGbG9hdCh0ZXgpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRlcHRoLCBkZXB0aCwgZGVwdGgsIDEuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluICgpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24gLCAxLjApO1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKSkueHl6O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRpc3RhbmNlLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSBmbG9hdCByYW5nZSA6IDEwMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkaXN0ID0gZGlzdGFuY2UobGlnaHRQb3NpdGlvbiwgdl9Xb3JsZFBvc2l0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRpc3QsIGRpc3QgKiBkaXN0LCAwLjAsIDAuMCk7XFxuI2Vsc2VcXG4gZGlzdCA9IGRpc3QgLyByYW5nZTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZGlzdCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuZmxvYXQgdGFwU2hhZG93TWFwKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHope1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRChtYXAsIHV2KTtcXG4gcmV0dXJuIHN0ZXAoeiwgZGVjb2RlRmxvYXQodGV4KSAqIDIuMCAtIDEuMCk7XFxufVxcbmZsb2F0IHBjZihzYW1wbGVyMkQgbWFwLCB2ZWMyIHV2LCBmbG9hdCB6LCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gdGFwU2hhZG93TWFwKG1hcCwgdXYsIHopO1xcbiB2ZWMyIG9mZnNldCA9IHZlYzIoMS4wIC8gdGV4dHVyZVNpemUpICogc2NhbGU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUENGX0tFUk5FTF9TSVpFOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2ICsgb2Zmc2V0ICogcGNmS2VybmVsW19pZHhfXSwgeik7XFxuIH19XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gZmxvYXQoUENGX0tFUk5FTF9TSVpFICsgMSk7XFxuI2Vsc2VcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoMC4wLCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKC1vZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMihvZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIC1vZmZzZXQueSksIHopO1xcbiByZXR1cm4gc2hhZG93Q29udHJpYiAvIDkuMDtcXG4jZW5kaWZcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBwY2YobWFwLCB1diwgeiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7XFxufVxcbmZsb2F0IGNoZWJ5c2hldlVwcGVyQm91bmQodmVjMiBtb21lbnRzLCBmbG9hdCB6KXtcXG4gZmxvYXQgcCA9IDAuMDtcXG4geiA9IHogKiAwLjUgKyAwLjU7XFxuIGlmICh6IDw9IG1vbWVudHMueCkge1xcbiBwID0gMS4wO1xcbiB9XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiB2YXJpYW5jZSA9IG1heCh2YXJpYW5jZSwgMC4wMDAwMDAxKTtcXG4gZmxvYXQgbUQgPSBtb21lbnRzLnggLSB6O1xcbiBmbG9hdCBwTWF4ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBtRCAqIG1EKTtcXG4gcE1heCA9IGNsYW1wKChwTWF4LTAuNCkvKDEuMC0wLjQpLCAwLjAsIDEuMCk7XFxuIHJldHVybiBtYXgocCwgcE1heCk7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzYW1wbGVyMkQgbWFwLCBtYXQ0IGxpZ2h0VlBNLCB2ZWMzIHBvc2l0aW9uLCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSwgdmVjMiBvZmZzZXRcXG4pIHtcXG4gdmVjNCBwb3NJbkxpZ2h0U3BhY2UgPSBsaWdodFZQTSAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIHBvc0luTGlnaHRTcGFjZS54eXogLz0gcG9zSW5MaWdodFNwYWNlLnc7XFxuIGZsb2F0IHogPSBwb3NJbkxpZ2h0U3BhY2UuejtcXG4gaWYoYWxsKGdyZWF0ZXJUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoLTAuOTksIC0wLjk5LCAtMS4wKSkpICYmXFxuIGFsbChsZXNzVGhhbihwb3NJbkxpZ2h0U3BhY2UueHl6LCB2ZWMzKDAuOTksIDAuOTksIDEuMCkpKSl7XFxuIHZlYzIgdXYgPSAocG9zSW5MaWdodFNwYWNlLnh5KzEuMCkgLyAyLjA7XFxuICNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHRleHR1cmUyRChtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQpLnh5O1xcbiByZXR1cm4gY2hlYnlzaGV2VXBwZXJCb3VuZChtb21lbnRzLCB6KTtcXG4gI2Vsc2VcXG4gcmV0dXJuIHBjZihtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQsIHosIHRleHR1cmVTaXplLCBzY2FsZSk7XFxuICNlbmRpZlxcbiB9XFxuIHJldHVybiAxLjA7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBjb21wdXRlU2hhZG93Q29udHJpYihtYXAsIGxpZ2h0VlBNLCBwb3NpdGlvbiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSwgdmVjMigwLjApKTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKHNhbXBsZXJDdWJlIG1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChkaXJlY3Rpb24pO1xcbiB2ZWM0IHNoYWRvd1RleCA9IHRleHR1cmVDdWJlKG1hcCwgZGlyZWN0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiB2ZWMyIG1vbWVudHMgPSBzaGFkb3dUZXgueHk7XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIGRpc3Q7XFxuIGZsb2F0IHAgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBpZihtb21lbnRzLnggKyAwLjAwMSA8IGRpc3Qpe1xcbiByZXR1cm4gY2xhbXAocCwgMC4wLCAxLjApO1xcbiB9ZWxzZXtcXG4gcmV0dXJuIDEuMDtcXG4gfVxcbiNlbHNlXFxuIHJldHVybiBzdGVwKGRpc3QsIChkZWNvZGVGbG9hdChzaGFkb3dUZXgpICsgMC4wMDAyKSAqIHJhbmdlKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKSB8fCBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4jaWZkZWYgU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcG90TGlnaHRTaGFkb3dNYXBzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgc3BvdExpZ2h0TWF0cmljZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG4jaWYgZGVmaW5lZChTSEFET1dfQ0FTQ0FERSlcXG51bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgcG9pbnRMaWdodFNoYWRvd01hcHNbUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG51bmlmb3JtIGJvb2wgc2hhZG93RW5hYmxlZCA6IHRydWU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbnVuaWZvcm0gdmVjMiBwY2ZLZXJuZWxbUENGX0tFUk5FTF9TSVpFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1NQT1RfTElHSFRfQ09VTlRdICkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzcG90TGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgc3BvdExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbX2lkeF9dXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBTUE9UX0xJR0hUX0NPVU5UOyBfaWR4XysrKXt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTSEFET1dfQ0FTQ0FERVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgZGVwdGggPSAoMi4wICogZ2xfRnJhZ0Nvb3JkLnogLSBnbF9EZXB0aFJhbmdlLm5lYXIgLSBnbF9EZXB0aFJhbmdlLmZhcilcXG4gLyAoZ2xfRGVwdGhSYW5nZS5mYXIgLSBnbF9EZXB0aFJhbmdlLm5lYXIpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBzaGFkb3dDb250cmlic1swXSA9IDEuMDtcXG4gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNIQURPV19DQVNDQURFOyBfaWR4XysrKSB7e1xcbiBpZiAoXFxuIGRlcHRoID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIGRlcHRoIDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMF0sIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMF0sXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiBzaGFkb3dDb250cmlic1swXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZWxzZVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tQT0lOVF9MSUdIVF9DT1VOVF0gKXtcXG4gdmVjMyBsaWdodFBvc2l0aW9uO1xcbiB2ZWMzIGRpcmVjdGlvbjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gZGlyZWN0aW9uID0gcG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkocG9pbnRMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb24sIHBvaW50TGlnaHRSYW5nZVtfaWR4X10pO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4uL1JlbmRlcmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5cclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmVQb29sIGZyb20gJy4uL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbmltcG9ydCBzaGFkb3dtYXBFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2hhZG93bWFwLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNoYWRvd21hcEVzc2wpO1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0ocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNEZXB0aE1hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzaGFkb3cgbWFwLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLlNoYWRvd01hcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLlNoYWRvd01hcCh7XHJcbiAqICAgICAgICAgc29mdFNoYWRvdzogY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBTaGFkb3dNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wcmVQYXNzLlNoYWRvd01hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNvZnQgc2hhZG93IHRlY2huaXF1ZS5cclxuICAgICAgICAgKiBDYW4gYmUge0BsaW5rIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuUENGfSBvciB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU019XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzb2Z0U2hhZG93OiBTaGFkb3dNYXBQYXNzLlBDRixcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgYmx1ciBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dCbHVyOiAxLjAsXHJcblxyXG4gICAgICAgIGxpZ2h0RnJ1c3R1bUJpYXM6ICdhdXRvJyxcclxuXHJcbiAgICAgICAga2VybmVsUENGOiBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAgICAgMSwgMCxcclxuICAgICAgICAgICAgMSwgMSxcclxuICAgICAgICAgICAgLTEsIDEsXHJcbiAgICAgICAgICAgIDAsIDEsXHJcbiAgICAgICAgICAgIC0xLCAwLFxyXG4gICAgICAgICAgICAtMSwgLTEsXHJcbiAgICAgICAgICAgIDEsIC0xLFxyXG4gICAgICAgICAgICAwLCAtMVxyXG4gICAgICAgIF0pLFxyXG5cclxuICAgICAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgICAgIF9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF90ZXh0dXJlczoge30sXHJcbiAgICAgICAgX3NoYWRvd01hcE51bWJlcjoge1xyXG4gICAgICAgICAgICAnUE9JTlRfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnRElSRUNUSU9OQUxfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnU1BPVF9MSUdIVCc6IDBcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZGVwdGhNYXRlcmlhbHM6IHt9LFxyXG4gICAgICAgIF9kaXN0YW5jZU1hdGVyaWFsczoge30sXHJcblxyXG4gICAgICAgIF9yZWNlaXZlcnM6IFtdLFxyXG4gICAgICAgIF9saWdodHNDYXN0U2hhZG93OiBbXSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q2FtZXJhczoge30sXHJcbiAgICAgICAgX2xpZ2h0TWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gR2F1c3NpYW4gZmlsdGVyIHBhc3MgZm9yIFZTTVxyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSCA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmdhdXNzaWFuX2JsdXInKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc0guc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyRGlyJywgMC4wKTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyRGlyJywgMS4wKTtcclxuXHJcbiAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc20uZGVidWdfZGVwdGgnKVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHNjZW5lIHRvIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gc2NlbmVDYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIGlmICghc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyU2hhZG93UGFzcyhyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYnVnIHJlbmRlcmluZyBvZiBzaGFkb3cgdGV4dHVyZXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIHggPSAwLCB5ID0gMDtcclxuICAgICAgICB2YXIgd2lkdGggPSBzaXplIHx8IHZpZXdwb3J0LndpZHRoIC8gNDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGggKiB0ZXh0dXJlLndpZHRoIC8gdGV4dHVyZS5oZWlnaHQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5zZXRVbmlmb3JtKCdkZXB0aE1hcCcsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgeCArPSB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUmVjZWl2ZXJzOiBmdW5jdGlvbiAocmVuZGVyZXIsIG1lc2gpIHtcclxuICAgICAgICBpZiAobWVzaC5yZWNlaXZlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY2VpdmVycy5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDEpO1xyXG5cclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3BjZktlcm5lbCcsIHRoaXMua2VybmVsUENGKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICAgICAgdmFyIGtlcm5lbFBDRiA9IHRoaXMua2VybmVsUENGO1xyXG4gICAgICAgICAgICBpZiAoa2VybmVsUENGICYmIGtlcm5lbFBDRi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnLCBrZXJuZWxQQ0YubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlUmVjZWl2ZXJzKHJlbmRlcmVyLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5jYXN0U2hhZG93ICYmICFsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cucHVzaChsaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJTaGFkb3dQYXNzOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAvLyByZXNldFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltuYW1lXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICB0aGlzLl91cGRhdGUocmVuZGVyZXIsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgLy8gTmVlZHMgdG8gdXBkYXRlIHRoZSByZWNlaXZlcnMgYWdhaW4gaWYgc2hhZG93cyBjb21lIGZyb20gMSB0byAwLlxyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggJiYgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93ID09PSAwO1xyXG5cclxuICAgICAgICBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFyIHdpdGggaGlnaC16LCBzbyB0aGUgcGFydCBub3QgcmVuZGVyZWQgd2lsbCBub3QgYmVlbiBzaGFkb3dlZFxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyBUT0RPIHJlc3RvcmVcclxuICAgICAgICBfZ2wuY2xlYXJDb2xvcigxLjAsIDEuMCwgMS4wLCAxLjApO1xyXG5cclxuICAgICAgICAvLyBTaGFkb3cgdW5pZm9ybXNcclxuICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50TGlnaHRTaGFkb3dNYXBzID0gW107XHJcblxyXG4gICAgICAgIHZhciBkaXJMaWdodEhhc0Nhc2NhZGU7XHJcbiAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmVzIGZvciBzaGFkb3cgbWFwXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3dbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC50eXBlID09PSAnRElSRUNUSU9OQUxfTElHSFQnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRpckxpZ2h0SGFzQ2FzY2FkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignT25seSBvbmUgZGlyZWVjdGlvbmFsIGxpZ2h0IHN1cHBvcnRlZCB3aXRoIHNoYWRvdyBjYXNjYWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGlnaHQuc2hhZG93Q2FzY2FkZSA+IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N1cHBvcnQgYXQgbW9zdCA0IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpckxpZ2h0SGFzQ2FzY2FkZSA9IGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdTUE9UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltsaWdodC50eXBlXSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIHRoaXMuX3NoYWRvd01hcE51bWJlcikge1xyXG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBsaWdodFR5cGUgKyAnX1NIQURPV01BUF9DT1VOVCc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZnJhZ21lbnREZWZpbmVzW2tleV0gIT09IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBrZXksIG51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgZGlyTGlnaHRIYXNDYXNjYWRlLnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRTaXplKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzLCB0eXBlOiAndHYnIH07XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd0Nhc2NhZGVDbGlwc0ZhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5wb3AoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5zaGlmdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgZnJvbSBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnNoYWRvd0Nhc2NhZGVDbGlwc05lYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0geyB2YWx1ZTogc2hhZG93Q2FzY2FkZUNsaXBzRmFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3BvdExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHNwb3RMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICB2YXIgc2hhZG93VW5pZm9ybXMgPSBzY2VuZS5zaGFkb3dVbmlmb3JtcztcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0TWF0cmljZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRTaGFkb3dNYXBTaXplcywgdHlwZTogJzFmdicgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb2ludExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogcG9pbnRMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlckRpcmVjdGlvbmFsTGlnaHRTaGFkb3c6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGxpdEZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xyXG4gICAgICAgIHZhciBzcGxpdFByb2pNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBjcm9wQkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjcm9wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbGlnaHQsIHNoYWRvd0Nhc2NhZGVDbGlwcywgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gRmlyc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuaXNGaW5pdGUoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIC5jb3B5KGJvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShzY2VuZUNhbWVyYS52aWV3TWF0cml4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb25zaWRlcmluZyBtb3Zpbmcgc3BlZWQgc2luY2UgdGhlIGJvdW5kaW5nIGJveCBpcyBmcm9tIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgLy8gVE9ETzogYWRkIGEgYmlhc1xyXG4gICAgICAgICAgICB2YXIgY2xpcHBlZEZhciA9IE1hdGgubWluKC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWluLnosIHNjZW5lQ2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkTmVhciA9IE1hdGgubWF4KC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnosIHNjZW5lQ2FtZXJhLm5lYXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYShsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsdnBNYXQ0QXJyID0gbGlnaHRWaWV3UHJvak1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgbGlnaHRQcm9qTWF0cml4LmNvcHkobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRWaWV3TWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobHZwTWF0NEFyciwgbGlnaHRQcm9qTWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNsaXBQbGFuZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGlzUGVyc3BlY3RpdmUgPSBzY2VuZUNhbWVyYSBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNjYWxlWiA9IChzY2VuZUNhbWVyYS5uZWFyICsgc2NlbmVDYW1lcmEuZmFyKSAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFogPSAyICogc2NlbmVDYW1lcmEubmVhciAqIHNjZW5lQ2FtZXJhLmZhciAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xvZyA9IGNsaXBwZWROZWFyICogTWF0aC5wb3coY2xpcHBlZEZhciAvIGNsaXBwZWROZWFyLCBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VuaSA9IGNsaXBwZWROZWFyICsgKGNsaXBwZWRGYXIgLSBjbGlwcGVkTmVhcikgKiBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZTtcclxuICAgICAgICAgICAgICAgIHZhciBjID0gY2xvZyAqIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3RvciArIGN1bmkgKiAoMSAtIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3Rvcik7XHJcbiAgICAgICAgICAgICAgICBjbGlwUGxhbmVzLnB1c2goYyk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMucHVzaCgtKC1jICogc2NhbGVaICsgb2Zmc2V0WikgLyAtYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0LCBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHJlbmRlcmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0LnNoYWRvd0Nhc2NhZGU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGxpdHRlZCBmcnVzdHVtXHJcbiAgICAgICAgICAgICAgICB2YXIgbmVhclBsYW5lID0gY2xpcFBsYW5lc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBmYXJQbGFuZSA9IGNsaXBQbGFuZXNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGVyc3BlY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHNwbGl0UHJvak1hdHJpeC5hcnJheSwgc2NlbmVDYW1lcmEuZm92IC8gMTgwICogTWF0aC5QSSwgc2NlbmVDYW1lcmEuYXNwZWN0LCBuZWFyUGxhbmUsIGZhclBsYW5lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQub3J0aG8oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0UHJvak1hdHJpeC5hcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDYW1lcmEubGVmdCwgc2NlbmVDYW1lcmEucmlnaHQsIHNjZW5lQ2FtZXJhLmJvdHRvbSwgc2NlbmVDYW1lcmEudG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyUGxhbmUsIGZhclBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNwbGl0RnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbihzcGxpdFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLmdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3goY3JvcEJCb3gsIGxpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBjcm9wQkJveC5hcHBseVByb2plY3Rpb24obGlnaHRQcm9qTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluID0gY3JvcEJCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIF9tYXggPSBjcm9wQkJveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzBdID0gTWF0aC5tYXgoX21pblswXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21pblsxXSA9IE1hdGgubWF4KF9taW5bMV0sIC0xKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMF0gPSBNYXRoLm1pbihfbWF4WzBdLCAxKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMV0gPSBNYXRoLm1pbihfbWF4WzFdLCAxKTtcclxuICAgICAgICAgICAgICAgIGNyb3BNYXRyaXgub3J0aG8oX21pblswXSwgX21heFswXSwgX21pblsxXSwgX21heFsxXSwgMSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5tdWx0aXBseUxlZnQoY3JvcE1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd1NpemUgPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlZCwgbGVmdCB0byByaWdodCA9PiBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgLSBpIC0gMSkgKiBzaGFkb3dTaXplLCAwLCBzaGFkb3dTaXplLCBzaGFkb3dTaXplLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciBmb3IgVlNNXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICAgICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpXHJcbiAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHJlbmRlclNwb3RMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNwb3RMaWdodE1hdHJpY2VzLCBzcG90TGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0U3BvdExpZ2h0Q2FtZXJhKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyTGlzdC5vcGFxdWUsIGxpZ2h0Q2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9nYXVzc2lhbkZpbHRlcihyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBtYXRyaXguY29weShsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLmludmVydCgpXHJcbiAgICAgICAgICAgIC5tdWx0aXBseUxlZnQobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICBzcG90TGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclBvaW50TGlnaHRTaGFkb3c6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBwb2ludExpZ2h0U2hhZG93TWFwcykge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHBvaW50TGlnaHRTaGFkb3dNYXBzLnB1c2godGV4dHVyZSk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0RWFjaFNpZGUgPSB7XHJcbiAgICAgICAgICAgIHB4OiBbXSwgcHk6IFtdLCBwejogW10sIG54OiBbXSwgbnk6IFtdLCBuejogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBiYm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0V29ybGRQb3NpdGlvbiA9IGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICB2YXIgbGlnaHRCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1pbi5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIGxpZ2h0QkJveC5tYXguc2V0QXJyYXkobGlnaHRXb3JsZFBvc2l0aW9uKTtcclxuICAgICAgICB2YXIgZXh0ZW50ID0gbmV3IFZlY3RvcjMocmFuZ2UsIHJhbmdlLCByYW5nZSk7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5hZGQoZXh0ZW50KTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnN1YihleHRlbnQpO1xyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0c05lZWRSZW5kZXIgPSB7IHB4OiBmYWxzZSwgcHk6IGZhbHNlLCBwejogZmFsc2UsIG54OiBmYWxzZSwgbnk6IGZhbHNlLCBuejogZmFsc2UgfTtcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSAmJiByZW5kZXJhYmxlLmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYm94LnRyYW5zZm9ybUZyb20oZ2VvbWV0cnkuYm91bmRpbmdCb3gsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFiYm94LmludGVyc2VjdEJvdW5kaW5nQm94KGxpZ2h0QkJveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYmJveC51cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbdGFyZ2V0c1tpXV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZ0eCA9IGJib3gudmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB2dHhbMF0gLSBsaWdodFdvcmxkUG9zaXRpb25bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSB2dHhbMV0gLSBsaWdodFdvcmxkUG9zaXRpb25bMV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHogPSB2dHhbMl0gLSBsaWdodFdvcmxkUG9zaXRpb25bMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ggPSBNYXRoLmFicyh4KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeSA9IE1hdGguYWJzKHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN6ID0gTWF0aC5hYnMoeik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN4ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeCA+IDAgPyAncHgnIDogJ254J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeSA+IGFic3opIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3kgPiAwID8gJ3B5JyA6ICdueSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3ogPiAwID8gJ3B6JyA6ICdueiddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0c1tpXV0ucHVzaChyZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9nZXRQb2ludExpZ2h0Q2FtZXJhKGxpZ2h0LCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGkpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0XSwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREZXB0aE1hdGVyaWFsOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICB2YXIgc2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXTtcclxuICAgICAgICB2YXIgaXNQb2ludExpZ2h0ID0gbGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJztcclxuICAgICAgICBpZiAoIXNoYWRvd01hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIHZhciBzaGFkZXJQcmVmaXggPSBpc1BvaW50TGlnaHQgPyAnY2xheS5zbS5kaXN0YW5jZS4nIDogJ2NsYXkuc20uZGVwdGguJztcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbixcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICd2ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZShzaGFkZXJQcmVmaXggKyAnZnJhZ21lbnQnKSlcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXSA9IHNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93U2xvcGVTY2FsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ3Nsb3BlU2NhbGUnLCBsaWdodC5zaGFkb3dTbG9wZVNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0JpYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXRVbmlmb3JtKCdiaWFzJywgbGlnaHQuc2hhZG93Qmlhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdsaWdodFBvc2l0aW9uJywgbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5KTtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdyYW5nZScsIGxpZ2h0LnJhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzaGFkb3dNYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2dhdXNzaWFuRmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNpemUpIHtcclxuICAgICAgICB2YXIgcGFyYW1ldGVyID0ge1xyXG4gICAgICAgICAgICB3aWR0aDogc2l6ZSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgdG1wVGV4dHVyZSA9IHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godG1wVGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlV2lkdGgnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmVIZWlnaHQnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHRtcFRleHR1cmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0VGV4dHVyZTogZnVuY3Rpb24gKGxpZ2h0LCBjYXNjYWRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGxpZ2h0Ll9fdWlkX187XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1trZXldO1xyXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gbGlnaHQuc2hhZG93UmVzb2x1dGlvbiB8fCA1MTI7XHJcbiAgICAgICAgY2FzY2FkZSA9IGNhc2NhZGUgfHwgMTtcclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQXQgbW9zdCA0IGNhc2NhZGVcclxuICAgICAgICAgICAgLy8gVE9ETyBzaGFyZSB3aXRoIGhlaWdodCA/XHJcbiAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSByZXNvbHV0aW9uICogY2FzY2FkZTtcclxuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByZXNvbHV0aW9uO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9waWMgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubWFnRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2tleV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRQb2ludExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQsIHRhcmdldCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5wb2ludCA9IHtcclxuICAgICAgICAgICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50W3RhcmdldF07XHJcblxyXG4gICAgICAgIGNhbWVyYS5mYXIgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBzd2l0Y2ggKHRhcmdldCkge1xyXG4gICAgICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWSwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWSwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKGNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgc2NlbmVWaWV3Qm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3QkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIC8vIENhbWVyYSBvZiBkaXJlY3Rpb25hbCBsaWdodCB3aWxsIGJlIGFkanVzdGVkXHJcbiAgICAgICAgLy8gdG8gY29udGFpbiB0aGUgdmlldyBmcnVzdHVtIGFuZCBzY2VuZSBib3VuZGluZyBib3ggYXMgdGlnaHRseSBhcyBwb3NzaWJsZVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobGlnaHQsIHNjZW5lLCBzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbDtcclxuXHJcbiAgICAgICAgICAgIHNjZW5lVmlld0JvdW5kaW5nQm94LmNvcHkoc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lKTtcclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guaW50ZXJzZWN0aW9uKHNjZW5lQ2FtZXJhLmZydXN0dW0uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZnJ1c3R1bShpbiB3b3JsZCBzcGFjZSlcclxuICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAuY29weShzY2VuZVZpZXdCb3VuZGluZ0JveC5taW4pXHJcbiAgICAgICAgICAgICAgICAuYWRkKHNjZW5lVmlld0JvdW5kaW5nQm94Lm1heClcclxuICAgICAgICAgICAgICAgIC5zY2FsZSgwLjUpXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5jb3B5KGxpZ2h0LnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgY2FtZXJhLnNjYWxlLmNvcHkobGlnaHQuc2NhbGUpO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0byBsaWdodCB2aWV3IHNwYWNlXHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeCwgY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXgsIGxpZ2h0Vmlld01hdHJpeCwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgbGlnaHRWaWV3QkJveC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShsaWdodFZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGxpZ2h0Vmlld0JCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbGlnaHRWaWV3QkJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAvLyBNb3ZlIGNhbWVyYSB0byBhZGp1c3QgdGhlIG5lYXIgdG8gMFxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KChtaW5bMF0gKyBtYXhbMF0pIC8gMiwgKG1pblsxXSArIG1heFsxXSkgLyAyLCBtYXhbMl0pXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mYXIgPSAtbWluWzJdICsgbWF4WzJdO1xyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcmVjZWl2ZXJzIG5vdCBpbiB0aGUgZnJ1c3R1bSB3aWxsIHN0aWwgcmVjZWl2ZSB0aGUgc2hhZG93LlxyXG4gICAgICAgICAgICBpZiAoaXNOYU4odGhpcy5saWdodEZydXN0dW1CaWFzKSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciAqPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciArPSB0aGlzLmxpZ2h0RnJ1c3R1bUJpYXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FtZXJhLmxlZnQgPSBtaW5bMF07XHJcbiAgICAgICAgICAgIGNhbWVyYS5yaWdodCA9IG1heFswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnRvcCA9IG1heFsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLmJvdHRvbSA9IG1pblsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2dldFNwb3RMaWdodENhbWVyYTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMuc3BvdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuc3BvdCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3Q7XHJcbiAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXNcclxuICAgICAgICBjYW1lcmEuZm92ID0gbGlnaHQucGVudW1icmFBbmdsZSAqIDI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGxpZ2h0LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ8V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBbcmVuZGVyZXJdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgLy8gUEVORElORyBSZW5kZXJlciBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRcclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbCB8fCByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UoX2dsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIuZ2wpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZXB0aE1hdGVyaWFscyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9saWdodENhbWVyYXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXIgPSB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFscyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlY2VpdmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgLy8gTWVzaCBtYXkgYmUgZGlzcG9zZWRcclxuICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUE9JTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnQU1CSUVOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLl9saWdodHNDYXN0U2hhZG93ID0gW107XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5TaGFkb3dNYXBQYXNzLlZTTSA9IDE7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0ZcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuUENGID0gMjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYWRvd01hcFBhc3M7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSBmcm9tICcuLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFJheVBpY2tpbmcgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IHNjZW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgc2NlbmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCBjYW1lcmFcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJlcjogbnVsbFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9yYXkgPSBuZXcgUmF5KCk7XHJcbiAgICB0aGlzLl9uZGMgPSBuZXcgVmVjdG9yMigpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBuZWFyZXN0IGludGVyc2VjdGlvbiBvYmplY3QgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IGZ1bmN0aW9uICh4LCB5LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy5waWNrQWxsKHgsIHksIFtdLCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIHJldHVybiBvdXRbMF0gfHwgbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIGFsbCBpbnRlcnNlY3Rpb24gb2JqZWN0cywgd2ljaCB3aWxsIGJlIHNvcnRlZCBmcm9tIG5lYXIgdG8gZmFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge0FycmF5fSBbb3V0cHV0XVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge0FycmF5LjxjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb24+fVxyXG4gICAgICovXHJcbiAgICBwaWNrQWxsOiBmdW5jdGlvbiAoeCwgeSwgb3V0cHV0LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcmVlblRvTkRDKHgsIHksIHRoaXMuX25kYyk7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheSh0aGlzLl9uZGMsIHRoaXMuX3JheSk7XHJcblxyXG4gICAgICAgIG91dHB1dCA9IG91dHB1dCB8fCBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZSh0aGlzLnNjZW5lLCBvdXRwdXQsIGZvcmNlUGlja0FsbCB8fCBmYWxzZSk7XHJcblxyXG4gICAgICAgIG91dHB1dC5zb3J0KHRoaXMuX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdE5vZGU6IGZ1bmN0aW9uIChub2RlLCBvdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIGlmICgobm9kZSBpbnN0YW5jZW9mIFJlbmRlcmFibGUpICYmIG5vZGUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgaWYgKCghbm9kZS5pZ25vcmVQaWNraW5nIHx8IGZvcmNlUGlja0FsbClcclxuICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHRyaWFuZ2xlIG1lc2ggc3VwcG9ydCByYXkgcGlja2luZ1xyXG4gICAgICAgICAgICAgICAgICAgIChub2RlLm1vZGUgPT09IGdsZW51bS5UUklBTkdMRVMgJiYgbm9kZS5nZW9tZXRyeS5pc1VzZUluZGljZXMoKSlcclxuICAgICAgICAgICAgICAgICAgICAvLyBPciBpZiBnZW9tZXRyeSBoYXMgaXQncyBvd24gcGlja0J5UmF5LCBwaWNrLCBpbXBsZW1lbnRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja0J5UmF5XHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0UmVuZGVyYWJsZShub2RlLCBvdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZShub2RlLl9jaGlsZHJlbltpXSwgb3V0LCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdFJlbmRlcmFibGU6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgdmFyIHdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgb3V0KSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpO1xyXG4gICAgICAgICAgICByYXkuY29weSh0aGlzLl9yYXkpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LmludmVydCh3b3JsZEludmVyc2UsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2tpbm5lZCBtZXNoIHdpbGwgaWdub3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm0uXHJcbiAgICAgICAgICAgIGlmICghaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgcmF5LmFwcGx5VHJhbnNmb3JtKHdvcmxkSW52ZXJzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmJveCA9IGlzU2tpbm5lZE1lc2ggPyByZW5kZXJhYmxlLnNrZWxldG9uLmJvdW5kaW5nQm94IDogZ2VvbWV0cnkuYm91bmRpbmdCb3g7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmJveCAmJiAhcmF5LmludGVyc2VjdEJvdW5kaW5nQm94KGJib3gpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkucGljaykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucGljayhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZGMueCwgdGhpcy5fbmRjLnksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBvdXRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkucGlja0J5UmF5KSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrQnlSYXkocmF5LCByZW5kZXJhYmxlLCBvdXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VsbEJhY2sgPSAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkJBQ0sgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DQ1cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uRlJPTlQgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DVyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuICAgICAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgICAgIHZhciB3ZWlnaHRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy53ZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBqb2ludEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdmFsaWQuXHJcbiAgICAgICAgICAgIGlmICghcG9zaXRpb25BdHRyIHx8ICFwb3NpdGlvbkF0dHIudmFsdWUgfHwgIWluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzQXJyYXkgPSByZW5kZXJhYmxlLnNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIHJlbmRlcmFibGUuam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBza2luTWF0cmljZXNbaV0gPSBza2luTWF0cmljZXNbaV0gfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAxNjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXVtrXSA9IHNraW5NYXRyaWNlc0FycmF5W2kgKiAxNiArIGtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB3ZWlnaHQgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraW5uZWRQb3NpdGlvbkF0dHIgfHwgIXNraW5uZWRQb3NpdGlvbkF0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5jcmVhdGVBdHRyaWJ1dGUoJ3NraW5uZWRQb3NpdGlvbicsICdmJywgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuaW5pdChnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgd2VpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICBqb2ludEF0dHIuZ2V0KGksIGpvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRbM10gPSAxIC0gd2VpZ2h0WzBdIC0gd2VpZ2h0WzFdIC0gd2VpZ2h0WzJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2V0KHNraW5uZWRQb3MsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludFtrXSA+PSAwICYmIHdlaWdodFtrXSA+IDFlLTQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0bXAsIHBvcywgc2tpbk1hdHJpY2VzW2pvaW50W2tdXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNraW5uZWRQb3MsIHNraW5uZWRQb3MsIHRtcCwgd2VpZ2h0W2tdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLnNldChpLCBza2lubmVkUG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSBpbmRpY2VzW2kgKyAyXTtcclxuICAgICAgICAgICAgICAgIHZhciBmaW5hbFBvc0F0dHIgPSBpc1NraW5uZWRNZXNoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIDogcG9zaXRpb25BdHRyO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMSwgdjEuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMiwgdjIuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMywgdjMuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjdWxsQmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MiwgdjMsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSh2MSwgdjMsIHYyLCByZW5kZXJhYmxlLmN1bGxpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50VyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NChwb2ludFcsIHBvaW50LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gcG9pbnQgbWF5YmUgbm90IHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmNvcHkocG9pbnRXLCBwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBSYXlQaWNraW5nLkludGVyc2VjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQsIHBvaW50VywgcmVuZGVyYWJsZSwgW2kxLCBpMiwgaTNdLCBpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy5kaXN0KHBvaW50VywgdGhpcy5fcmF5Lm9yaWdpbilcclxuICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIF9pbnRlcnNlY3Rpb25Db21wYXJlRnVuYzogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb25cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludFdvcmxkXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSB0YXJnZXRcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdHJpYW5nbGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHRyaWFuZ2xlSW5kZXhcclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXHJcbiAqL1xyXG5SYXlQaWNraW5nLkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChwb2ludCwgcG9pbnRXb3JsZCwgdGFyZ2V0LCB0cmlhbmdsZSwgdHJpYW5nbGVJbmRleCwgZGlzdGFuY2UpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHBvaW50IGluIGxvY2FsIHRyYW5zZm9ybSBjb29yZGluYXRlc1xyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb2ludCA9IHBvaW50O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gd29ybGQgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50V29ybGQgPSBwb2ludFdvcmxkO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiB0cmlhbmdsZSwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgdmVydGV4IGluZGV4XHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGUgPSB0cmlhbmdsZTtcclxuICAgIC8qKlxyXG4gICAgICogSW5kZXggb2YgaW50ZXJzZWN0aW9uIHRyaWFuZ2xlLlxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyaWFuZ2xlSW5kZXggPSB0cmlhbmdsZUluZGV4O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGludGVyc2VjdGlvbiBwb2ludCB0byByYXkgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXlQaWNraW5nO1xyXG4iLCIvLyBTcGhlcmljYWwgSGFybW9uaWMgSGVscGVyc1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxudmFyIHNoID0ge307XHJcblxyXG5pbXBvcnQgcHJvamVjdEVudk1hcFNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvcHJvamVjdEVudk1hcC5nbHNsLmpzJztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLy8gUHJvamVjdCBvbiBncHUsIGJ1dCBuZWVkcyBicm93c2VyIHRvIHN1cHBvcnQgcmVhZFBpeGVscyBhcyBGbG9hdDMyQXJyYXkuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcEdQVShyZW5kZXJlciwgZW52TWFwKSB7XHJcbiAgICB2YXIgc2hUZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IDksXHJcbiAgICAgICAgaGVpZ2h0OiAxLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHByb2plY3RFbnZNYXBTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdURVhUVVJFX1NJWkUnLCBlbnZNYXAud2lkdGgpO1xyXG4gICAgcGFzcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcblxyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBmcmFtZWJ1ZmZlci5hdHRhY2goc2hUZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyBUT0RPIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IHN1cHBvcnQgRmxvYXQzMkFycmF5XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDQpO1xyXG4gICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscygwLCAwLCA5LCAxLCBUZXh0dXJlLlJHQkEsIFRleHR1cmUuRkxPQVQsIHBpeGVscyk7XHJcblxyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICBjb2VmZltpICogM10gPSBwaXhlbHNbaSAqIDRdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMV0gPSBwaXhlbHNbaSAqIDQgKyAxXTtcclxuICAgICAgICBjb2VmZltpICogMyArIDJdID0gcGl4ZWxzW2kgKiA0ICsgMl07XHJcbiAgICB9XHJcbiAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFybW9uaWNzKG5vcm1hbCwgaW5kZXgpe1xyXG4gICAgdmFyIHggPSBub3JtYWxbMF07XHJcbiAgICB2YXIgeSA9IG5vcm1hbFsxXTtcclxuICAgIHZhciB6ID0gbm9ybWFsWzJdO1xyXG5cclxuICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAxLjA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDIpIHtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNCkge1xyXG4gICAgICAgIHJldHVybiB4ICogejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA1KSB7XHJcbiAgICAgICAgcmV0dXJuIHkgKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDYpIHtcclxuICAgICAgICByZXR1cm4geCAqIHk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNykge1xyXG4gICAgICAgIHJldHVybiAzLjAgKiB6ICogeiAtIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB4ICogeCAtIHkgKiB5O1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgbm9ybWFsVHJhbnNmb3JtID0ge1xyXG4gICAgcHg6IFsyLCAxLCAwLCAtMSwgLTEsIDFdLFxyXG4gICAgbng6IFsyLCAxLCAwLCAxLCAtMSwgLTFdLFxyXG4gICAgcHk6IFswLCAyLCAxLCAxLCAtMSwgLTFdLFxyXG4gICAgbnk6IFswLCAyLCAxLCAxLCAxLCAxXSxcclxuICAgIHB6OiBbMCwgMSwgMiwgLTEsIC0xLCAtMV0sXHJcbiAgICBuejogWzAsIDEsIDIsIDEsIC0xLCAxXVxyXG59O1xyXG5cclxuLy8gUHJvamVjdCBvbiBjcHUuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcENQVShyZW5kZXJlciwgY3ViZVBpeGVscywgd2lkdGgsIGhlaWdodCkge1xyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgdmFyIG5vcm1hbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgdGV4ZWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGZldGNoTm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIGZvciAodmFyIG0gPSAwOyBtIDwgOTsgbSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0YXJnZXRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBwaXhlbHMgPSBjdWJlUGl4ZWxzW3RhcmdldHNba11dO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZGVSZXN1bHQgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IDA7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5vcm1hbFRyYW5zZm9ybVt0YXJnZXRzW2tdXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFswXSA9IHggLyAod2lkdGggLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gRmxpcCB5P1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsxXSA9IHkgLyAoaGVpZ2h0IC0gMS4wKSAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxbMl0gPSAtMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG5vcm1hbCwgbm9ybWFsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMF0gPSBub3JtYWxbdHJhbnNmb3JtWzBdXSAqIHRyYW5zZm9ybVszXTtcclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsxXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMV1dICogdHJhbnNmb3JtWzRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzJdID0gbm9ybWFsW3RyYW5zZm9ybVsyXV0gKiB0cmFuc2Zvcm1bNV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsyXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJHQk0gRGVjb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gcGl4ZWxzW2krK10gLyAyNTUgKiA4LjEyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdICo9IHNjYWxlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNpZGVSZXN1bHQsIHNpZGVSZXN1bHQsIHRleGVsLCBoYXJtb25pY3MoZmV0Y2hOb3JtYWwsIG0pICogLW5vcm1hbFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLW5vcm1hbC56IGVxdWFscyBjb3ModGhldGEpIG9mIExhbWJlcnRpYW5cclxuICAgICAgICAgICAgICAgICAgICBkaXZpZGVyICs9IC1ub3JtYWxbMl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChyZXN1bHQsIHJlc3VsdCwgc2lkZVJlc3VsdCwgMSAvIGRpdmlkZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29lZmZbbSAqIDNdID0gcmVzdWx0WzBdIC8gNi4wO1xyXG4gICAgICAgIGNvZWZmW20gKiAzICsgMV0gPSByZXN1bHRbMV0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAyXSA9IHJlc3VsdFsyXSAvIDYuMDtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IFt0ZXh0dXJlT3B0cy5sb2RdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNXVxyXG4gKi9cclxuc2gucHJvamVjdEVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBlbnZNYXAsIG9wdHMpIHtcclxuXHJcbiAgICAvLyBUT0RPIHNSR0JcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMubG9kID0gb3B0cy5sb2QgfHwgMDtcclxuXHJcbiAgICB2YXIgc2t5Ym94O1xyXG4gICAgdmFyIGR1bW15U2NlbmUgPSBuZXcgU2NlbmUoKTtcclxuICAgIHZhciBzaXplID0gNjQ7XHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNpemUgPSAoZW52TWFwLmltYWdlICYmIGVudk1hcC5pbWFnZS5weCkgPyBlbnZNYXAuaW1hZ2UucHgud2lkdGggOiBlbnZNYXAud2lkdGg7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgICAgIHNjZW5lOiBkdW1teVNjZW5lLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52TWFwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRvIHJnYm1cclxuICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciBoZWlnaHQgPSBNYXRoLmNlaWwoc2l6ZSAvIE1hdGgucG93KDIsIG9wdHMubG9kKSk7XHJcbiAgICB2YXIgcmdibVRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHRcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBza3lib3gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0VOQ09ERScpO1xyXG4gICAgaWYgKG9wdHMuZGVjb2RlUkdCTSkge1xyXG4gICAgICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fREVDT0RFJyk7XHJcbiAgICB9XHJcbiAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdsb2QnLCBvcHRzLmxvZCk7XHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHJnYm1UZXh0dXJlXHJcbiAgICB9KTtcclxuICAgIHZhciBjdWJlUGl4ZWxzID0ge307XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdWJlUGl4ZWxzW3RhcmdldHNbaV1dID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tpXSk7XHJcbiAgICAgICAgY2FtZXJhLmZvdiA9IDkwO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLmF0dGFjaChyZ2JtVGV4dHVyZSk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscyhcclxuICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCxcclxuICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLlVOU0lHTkVEX0JZVEUsIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV1cclxuICAgICAgICApO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2t5Ym94LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZ2JtVGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICByZXR1cm4gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNoO1xyXG4iLCJcclxuLyoqXHJcbiAqIEhlbHBlcnMgZm9yIGNyZWF0aW5nIGEgY29tbW9uIDNkIGFwcGxpY2F0aW9uLlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYXBwbGljYXRpb25cclxuICovXHJcblxyXG4gLy8gVE9ETyBjcmVhdGVDb21wb3NpdG9yXHJcbiAvLyBUT0RPIERpc3Bvc2UgdGVzdC4gZ2VvQ2FjaGUgdGVzdC5cclxuIC8vIFRPRE8gVG9uZW1hcHBpbmcgZXhwb3N1cmVcclxuIC8vIFRPRE8gZml0TW9kZWwuXHJcbiAvLyBUT0RPIFBhcnRpY2xlID9cclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9TY2VuZSc7XHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IEN1YmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9DdWJlJztcclxuaW1wb3J0IFNwaGVyZUdlbyBmcm9tICcuL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBQbGFuZUdlbyBmcm9tICcuL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0xURkxvYWRlciBmcm9tICcuL2xvYWRlci9HTFRGJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IERpcmVjdGlvbmFsTGlnaHQgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludExpZ2h0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBBbWJpZW50TGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50JztcclxuaW1wb3J0IEFtYmllbnRDdWJlbWFwTGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0hMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBTaGFkb3dNYXBQYXNzIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmF5UGlja2luZyBmcm9tICcuL3BpY2tpbmcvUmF5UGlja2luZyc7XHJcbmltcG9ydCBMUlVDYWNoZSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgc2hVdGlsIGZyb20gJy4vdXRpbC9zaCc7XHJcbmltcG9ydCB0ZXh0dXJlVXRpbCBmcm9tICcuL3V0aWwvdGV4dHVyZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4vc2hhZGVyL2J1aWx0aW4nO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcblxyXG52YXIgRVZFX05BTUVTID0gWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJyxcclxuICAgICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZScsXHJcbiAgICAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCdcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudH0gSW1hZ2VMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xIVE1MQ2FudmFzRWxlbWVudHxIVE1MSW1hZ2VFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8Y2xheS5UZXh0dXJlMkR9IFRleHR1cmVMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xBcnJheS48bnVtYmVyPn0gQ29sb3JcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7SFRNTEVsZW1lbnR8c3RyaW5nfSBEb21RdWVyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHAzRE5hbWVzcGFjZVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBpbml0IEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBpbml0aW5nIGFwcC5cclxuICogICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZXR1cm4gYSBwcm9taXNlIGluIGluaXQgdG8gc3RhcnQgdGhlIGxvb3AgYXN5bmNocm9ub3VzbHkgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbG9vcCBMb29wIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgZWFjaCBmcmFtZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b1JlbmRlcj10cnVlXSBJZiByZW5kZXIgYXV0b21hdGljYWxseSBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYmVmb3JlUmVuZGVyXVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYWZ0ZXJSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdIENvbnRhaW5lciB3aWR0aC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtoZWlnaHRdIENvbnRhaW5lciBoZWlnaHQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgRnVuY3Rpb24+fSBbbWV0aG9kc10gTWV0aG9kcyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgdG8gQXBwM0QjbWV0aG9kcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtncmFwaGljXSBHcmFwaGljIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNoYWRvdywgY29sb3Igc3BhY2UuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMuc2hhZG93PWZhbHNlXSBJZiBlbmFibGUgc2hhZG93XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMubGluZWFyPWZhbHNlXSBJZiB1c2UgbGluZWFyIGNvbG9yIHNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMudG9uZW1hcHBpbmc9ZmFsc2VdIElmIGVuYWJsZSBBQ0VTIHRvbmUgbWFwcGluZy5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZXZlbnQ9ZmFsc2VdIElmIGVuYWJsZSBtb3VzZS90b3VjaCBldmVudC4gSXQgd2lsbCBzbG93IGRvd24gdGhlIHN5c3RlbSBpZiBnZW9tZXRyaWVzIGFyZSBjb21wbGV4LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFuZGFyZE1hdGVyaWFsTVJDb25maWdcclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NoYWRlcj0nc3RhbmRhcmRNUiddXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtjb2xvcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFthbHBoYV1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttZXRhbG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcm91Z2huZXNzXVxyXG4gKiBAcHJvcGVydHkge0NvbG9yfSBbZW1pc3Npb25dXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZW1pc3Npb25JbnRlbnNpdHldXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50XVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZGlmZnVzZU1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW25vcm1hbE1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW3JvdWdobmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW21ldGFsbmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW2VtaXNzaXZlTWFwXVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBVc2luZyBBcHAzRCBpcyBhIG11Y2ggbW9yZSBjb252ZW5pZW50IHdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSB5b3VyIDNEIGFwcGxpY2F0aW9uLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0aWVzIHRvOlxyXG4gKlxyXG4gKiArIE1hbmFnZSBhcHBsaWNhdGlvbiBsb29wIGFuZCByZW5kZXJpbmcuXHJcbiAqICsgQ29sbGVjdCBHUFUgcmVzb3VyY2UgYXV0b21hdGljYWxseSB3aXRob3V0IG1lbW9yeSBsZWFrIGNvbmNlcm4uXHJcbiAqICsgTW91c2UgZXZlbnQgbWFuYWdlbWVudC5cclxuICogKyBDcmVhdGUgc2NlbmUgb2JqZWN0cywgbWF0ZXJpYWxzLCB0ZXh0dXJlcyB3aXRoIHNpbXBsZXIgY29kZS5cclxuICogKyBMb2FkIG1vZGVscyB3aXRoIG9uZSBsaW5lIG9mIGNvZGUuXHJcbiAqICsgUHJvbWlzZWQgaW50ZXJmYWNlcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgcm90YXRpbmcgY3ViZS5cclxuICpcclxuYGBganNcclxudmFyIGFwcCA9IGNsYXkuYXBwbGljYXRpb24uY3JlYXRlKCcjdmlld3BvcnQnLCB7XHJcbiAgICBpbml0OiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgcGVyc3BlY3RpdmUgY2FtZXJhLlxyXG4gICAgICAgIC8vIEZpcnN0IHBhcmFtZXRlciBpcyB0aGUgY2FtZXJhIHBvc2l0aW9uLiBXaGljaCBpcyBpbiBmcm9udCBvZiB0aGUgY3ViZS5cclxuICAgICAgICAvLyBTZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgbG9va0F0IHRhcmdldC4gV2hpY2ggaXMgdGhlIG9yaWdpbiBvZiB0aGUgd29ybGQsIGFuZCB3aGVyZSB0aGUgY3ViZSBwdXRzLlxyXG4gICAgICAgIHRoaXMuX2NhbWVyYSA9IGFwcC5jcmVhdGVDYW1lcmEoWzAsIDIsIDVdLCBbMCwgMCwgMF0pO1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIHNhbXBsZSBjdWJlXHJcbiAgICAgICAgdGhpcy5fY3ViZSA9IGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQuIFRoZSBkaXJlY3Rpb24gaXMgZnJvbSB0b3AgcmlnaHQgdG8gbGVmdCBib3R0b20sIGF3YXkgZnJvbSBjYW1lcmEuXHJcbiAgICAgICAgdGhpcy5fbWFpbkxpZ2h0ID0gYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdKTtcclxuICAgIH0sXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gU2ltcGx5IHJvdGF0aW5nIHRoZSBjdWJlIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICAgIHRoaXMuX2N1YmUucm90YXRpb24ucm90YXRlWShhcHAuZnJhbWVUaW1lIC8gMTAwMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEXHJcbiAqIEBwYXJhbSB7RG9tUXVlcnl9IGRvbSBDb250YWluZXIgZG9tIGVsZW1lbnQgb3IgYSBzZWxlY3RvciBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBgcXVlcnlTZWxlY3RvcmBcclxuICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICovXHJcbmZ1bmN0aW9uIEFwcDNEKGRvbSwgYXBwTlMpIHtcclxuXHJcbiAgICBhcHBOUyA9IGFwcE5TIHx8IHt9O1xyXG4gICAgYXBwTlMuZ3JhcGhpYyA9IGFwcE5TLmdyYXBoaWMgfHwge307XHJcblxyXG4gICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIGFwcE5TLmF1dG9SZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZG9tID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRvbSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZG9tJyk7IH1cclxuXHJcbiAgICB2YXIgaXNEb21DYW52YXMgPSAhZG9tLm5vZGVOYW1lICAvLyBOb3QgaW4gZG9tIGVudmlyb25tZW50XHJcbiAgICAgICAgfHwgZG9tLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdDQU5WQVMnO1xyXG5cclxuICAgIHZhciByZW5kZXJlck9wdHMgPSB7fTtcclxuICAgIGlzRG9tQ2FudmFzICYmIChyZW5kZXJlck9wdHMuY2FudmFzID0gZG9tKTtcclxuICAgIGFwcE5TLmRldmljZVBpeGVsUmF0aW8gJiYgKHJlbmRlcmVyT3B0cy5kZXZpY2VQaXhlbFJhdGlvID0gYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcblxyXG4gICAgdmFyIGdSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihyZW5kZXJlck9wdHMpO1xyXG4gICAgdmFyIGdXaWR0aCA9IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgIHZhciBnSGVpZ2h0ID0gYXBwTlMuaGVpZ2h0IHx8IGRvbS5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgdmFyIGdTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIGdUaW1lbGluZSA9IG5ldyBUaW1lbGluZSgpO1xyXG4gICAgdmFyIGdTaGFkb3dQYXNzID0gYXBwTlMuZ3JhcGhpYy5zaGFkb3cgJiYgbmV3IFNoYWRvd01hcFBhc3MoKTtcclxuICAgIHZhciBnUmF5UGlja2luZyA9IGFwcE5TLmV2ZW50ICYmIG5ldyBSYXlQaWNraW5nKHtcclxuICAgICAgICBzY2VuZTogZ1NjZW5lLFxyXG4gICAgICAgIHJlbmRlcmVyOiBnUmVuZGVyZXJcclxuICAgIH0pO1xyXG5cclxuICAgICFpc0RvbUNhbnZhcyAmJiBkb20uYXBwZW5kQ2hpbGQoZ1JlbmRlcmVyLmNhbnZhcyk7XHJcblxyXG4gICAgZ1JlbmRlcmVyLnJlc2l6ZShnV2lkdGgsIGdIZWlnaHQpO1xyXG5cclxuICAgIHZhciBnRnJhbWVUaW1lID0gMDtcclxuICAgIHZhciBnRWxhcHNlZFRpbWUgPSAwO1xyXG5cclxuICAgIGdUaW1lbGluZS5zdGFydCgpO1xyXG5cclxuICAgIHZhciB1c2VyTWV0aG9kcyA9IHt9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIGFwcE5TLm1ldGhvZHMpIHtcclxuICAgICAgICB1c2VyTWV0aG9kc1trZXldID0gYXBwTlMubWV0aG9kc1trZXldLmJpbmQoYXBwTlMsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWluZXIgZG9tIGVsZW1lbnRcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2NvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb207IH0gfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3JlbmRlcmVyXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVuZGVyZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXI7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTY2VuZTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN0aW1lbGluZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1RpbWVsaW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgbGFzdCBmcmFtZS4gQ2FuIGJlIHVzZWQgaW4gbG9vcCB0byBjYWxjdWxhdGUgdGhlIG1vdmVtZW50LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZnJhbWVUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcmFtZVRpbWU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnRnJhbWVUaW1lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgYXBwbGljYXRpb24gY3JlYXRlZC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2VsYXBzZWRUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbGFwc2VkVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdFbGFwc2VkVGltZTsgfX0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdpZHRoIG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHdpZHRoOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldFdpZHRoKCk7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhlaWdodCBvZiB2aWV3cG9ydC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaGVpZ2h0OiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldEhlaWdodCgpOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWV0aG9kcyBmcm9tIHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZX1cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI21ldGhvZHNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGhvZHM6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1c2VyTWV0aG9kczsgfSB9LFxyXG5cclxuICAgICAgICBfc2hhZG93UGFzczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTaGFkb3dQYXNzOyB9IH0sXHJcblxyXG4gICAgICAgIF9hcHBOUzogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFwcE5TOyB9IH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgYXBwbGljYXRpb24uIFdpbGwgdXNlIHRoZSBjb250YWluZXIgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IGlmIHdpZHRoL2hlaWdodCBpbiBwYXJhbWV0ZXJzIGFyZSBub3QgZ2l2ZW4uXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBtZW1iZXJPZiB7Y2xheS5hcHBsaWNhdGlvbi5BcHAzRH1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGdXaWR0aCA9IHdpZHRoIHx8IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgICAgICBnSGVpZ2h0ID0gaGVpZ2h0IHx8IGRvbS5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuICAgICAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSB0aGUgYXBwbGljYXRpb25cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoYXBwTlMuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICBhcHBOUy5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBnVGltZWxpbmUuc3RvcCgpO1xyXG4gICAgICAgIGdSZW5kZXJlci5kaXNwb3NlU2NlbmUoZ1NjZW5lKTtcclxuICAgICAgICBnU2hhZG93UGFzcyAmJiBnU2hhZG93UGFzcy5kaXNwb3NlKGdSZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGRvbS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoZXZlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzW21ha2VIYW5kbGVyTmFtZShldmVUeXBlKV0gJiYgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCBtYWtlSGFuZGxlck5hbWUoZXZlVHlwZSkpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBnUmF5UGlja2luZyAmJiB0aGlzLl9pbml0TW91c2VFdmVudHMoZ1JheVBpY2tpbmcpO1xyXG5cclxuICAgIHRoaXMuX2dlb0NhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuICAgIHRoaXMuX3RleENhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuXHJcbiAgICAvLyBHUFUgUmVzb3VyY2VzLlxyXG4gICAgdGhpcy5fdGV4dHVyZXNMaXN0ID0ge307XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IHt9O1xyXG5cclxuICAgIC8vIERvIGluaXQgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgdmFyIGluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGFwcE5TLmluaXQgJiYgYXBwTlMuaW5pdCh0aGlzKSk7XHJcbiAgICAvLyBVc2UgdGhlIGluaXRlZCBjYW1lcmEuXHJcbiAgICBnUmF5UGlja2luZyAmJiAoZ1JheVBpY2tpbmcuY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKSk7XHJcblxyXG4gICAgaWYgKCFhcHBOUy5sb29wKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdNaXNzIGxvb3AgbWV0aG9kLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGdUaW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgICAgIGdGcmFtZVRpbWUgPSBmcmFtZVRpbWU7XHJcbiAgICAgICAgICAgIGdFbGFwc2VkVGltZSArPSBmcmFtZVRpbWU7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmFzcGVjdCA9IGdSZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBjYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgYXBwTlMubG9vcCAmJiBhcHBOUy5sb29wKHNlbGYpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGYuY29sbGVjdFJlc291cmNlcygpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZ1NjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHJlbmRlckxpc3QpIHtcclxuICAgICAgICBpZiAodGhpcy5faW5SZW5kZXIpIHtcclxuICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgZ3JhcGhpYyBvcHRpb25zIHdoZW4gdXNpbmcgI3JlbmRlciBmdW5jdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC5vcGFxdWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC50cmFuc3BhcmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHRoaXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBJbWFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSW1hZ2UpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MVmlkZW9FbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0S2V5RnJvbUltYWdlTGlrZSh2YWwpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdmFsIDogKHZhbC5fX2tleV9fIHx8ICh2YWwuX19rZXlfXyA9IHV0aWwuZ2VuR1VJRCgpKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSB7XHJcbiAgICByZXR1cm4gJ18nICsgZXZlVHlwZSArICdIYW5kbGVyJztcclxufVxyXG5cclxuZnVuY3Rpb24gcGFja2FnZUV2ZW50KGV2ZW50VHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgd2hlZWxEZWx0YSkge1xyXG4gICAgdmFyIGV2ZW50ID0gdXRpbC5jbG9uZShwaWNrUmVzdWx0KTtcclxuICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XHJcbiAgICBldmVudC5vZmZzZXRYID0gb2Zmc2V0WDtcclxuICAgIGV2ZW50Lm9mZnNldFkgPSBvZmZzZXRZO1xyXG4gICAgaWYgKHdoZWVsRGVsdGEgIT09IG51bGwpIHtcclxuICAgICAgICBldmVudC53aGVlbERlbHRhID0gd2hlZWxEZWx0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBldmVudDtcclxufVxyXG5cclxuZnVuY3Rpb24gYnViYmxpbmdFdmVudCh0YXJnZXQsIGV2ZW50KSB7XHJcbiAgICB3aGlsZSAodGFyZ2V0ICYmICFldmVudC5jYW5jZWxCdWJibGUpIHtcclxuICAgICAgICB0YXJnZXQudHJpZ2dlcihldmVudC50eXBlLCBldmVudCk7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmdldFBhcmVudCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2luaXRNb3VzZUV2ZW50cyA9IGZ1bmN0aW9uIChyYXlQaWNraW5nKSB7XHJcbiAgICB2YXIgZG9tID0gdGhpcy5jb250YWluZXI7XHJcblxyXG4gICAgdmFyIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoX2V2ZVR5cGUpIHtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sIF9ldmVUeXBlLCB0aGlzW21ha2VIYW5kbGVyTmFtZShfZXZlVHlwZSldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFyYXlQaWNraW5nLmNhbWVyYSkgeyAvLyBOb3QgaGF2ZSBjYW1lcmEgeWV0LlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJveCA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFgsIG9mZnNldFk7XHJcbiAgICAgICAgICAgIHZhciBldmVUeXBlID0gX2V2ZVR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZS5pbmRleE9mKCd0b3VjaCcpID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciB0b3VjaCA9IGV2ZVR5cGUgIT09ICd0b3VjaGVuZCdcclxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0VG91Y2hlc1swXVxyXG4gICAgICAgICAgICAgICAgICAgIDogZS5jaGFuZ2VkVG91Y2hlc1swXTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVUeXBlID09PSAndG91Y2hzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlZG93bic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVUeXBlID09PSAndG91Y2hlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZXVwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZW1vdmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHRvdWNoLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSB0b3VjaC5jbGllbnRZIC0gYm94LnRvcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldFggPSBlLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSBlLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHJheVBpY2tpbmcucGljayhvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdET01Nb3VzZVNjcm9sbCcgfHwgZXZlVHlwZSA9PT0gJ21vdXNld2hlZWwnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWx0YSA9IChlLndoZWVsRGVsdGEpID8gZS53aGVlbERlbHRhIC8gMTIwIDogLShlLmRldGFpbCB8fCAwKSAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBKdXN0IGlnbm9yZSBzaWxlbnQgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0LnRhcmdldC5zaWxlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElORyB0b3VjaGRvd24gc2hvdWxkIHRyaWdnZXIgbW91c2VvdmVyIGV2ZW50ID9cclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9IHBpY2tSZXN1bHQudGFyZ2V0ICE9PSBvbGRUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVGFyZ2V0ICYmIGJ1YmJsaW5nRXZlbnQob2xkVGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3V0Jywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlbW92ZScsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3ZlcicsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoZXZlVHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgZGVsdGEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IHBpY2tSZXN1bHQudGFyZ2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9sZFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgIH0sIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sIHRoaXMpO1xyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl91cGRhdGVHcmFwaGljT3B0aW9ucyA9IGZ1bmN0aW9uIChncmFwaGljT3B0cywgbGlzdCwgaXNTa3lib3gpIHtcclxuICAgIHZhciBlbmFibGVUb25lbWFwcGluZyA9ICEhZ3JhcGhpY09wdHMudG9uZW1hcHBpbmc7XHJcbiAgICB2YXIgaXNMaW5lYXJTcGFjZSA9ICEhZ3JhcGhpY09wdHMubGluZWFyO1xyXG5cclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG1hdCA9IGxpc3RbaV0ubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKG1hdCA9PT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW5hYmxlVG9uZW1hcHBpbmcgPyBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpIDogbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpO1xyXG4gICAgICAgIGlmIChpc0xpbmVhclNwYWNlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvZGVTUkdCID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGlzU2t5Ym94ICYmIG1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykgJiYgIW1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykuc1JHQikge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlU1JHQiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY29kZVNSR0IgJiYgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl9kb1JlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUpIHtcclxuICAgIHZhciBjYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRG8gcmVuZGVyXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSB0cnVlO1xyXG4gICAgdmFyIGFwcE5TID0gdGhpcy5fYXBwTlM7XHJcbiAgICBhcHBOUy5iZWZvcmVSZW5kZXIgJiYgYXBwTlMuYmVmb3JlUmVuZGVyKHNlbGYpO1xyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgdmFyIHNoYWRvd1Bhc3MgPSB0aGlzLl9zaGFkb3dQYXNzO1xyXG5cclxuICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgdmFyIHNreWJveExpc3QgPSBbXTtcclxuICAgIHNjZW5lLnNreWJveCAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5Ym94KTtcclxuICAgIHNjZW5lLnNreWRvbWUgJiYgc2t5Ym94TGlzdC5wdXNoKHNjZW5lLnNreWRvbWUpO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUdyYXBoaWNPcHRpb25zKGFwcE5TLmdyYXBoaWMsIHNreWJveExpc3QsIHRydWUpO1xyXG4gICAgLy8gUmVuZGVyIHNoYWRvdyBwYXNzXHJcbiAgICBzaGFkb3dQYXNzICYmIHNoYWRvd1Bhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgbnVsbCwgdHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5fZG9SZW5kZXIocmVuZGVyZXIsIHNjZW5lLCB0cnVlKTtcclxuXHJcbiAgICBhcHBOUy5hZnRlclJlbmRlciAmJiBhcHBOUy5hZnRlclJlbmRlcihzZWxmKTtcclxuICAgIHRoaXMuX2luUmVuZGVyID0gZmFsc2U7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuY29sbGVjdFJlc291cmNlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgdmFyIHRleHR1cmVzTGlzdCA9IHRoaXMuX3RleHR1cmVzTGlzdDtcclxuICAgIHZhciBnZW9tZXRyaWVzTGlzdCA9IHRoaXMuX2dlb21ldHJpZXNMaXN0O1xyXG4gICAgLy8gTWFyayBhbGwgcmVzb3VyY2VzIHVudXNlZDtcclxuICAgIG1hcmtVbnVzZWQodGV4dHVyZXNMaXN0KTtcclxuICAgIG1hcmtVbnVzZWQoZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIC8vIENvbGxlY3QgcmVzb3VyY2VzIHVzZWQgaW4gdGhpcyBmcmFtZS5cclxuICAgIHZhciBuZXdUZXh0dXJlc0xpc3QgPSBbXTtcclxuICAgIHZhciBuZXdHZW9tZXRyaWVzTGlzdCA9IFtdO1xyXG4gICAgY29sbGVjdFJlc291cmNlcyhzY2VuZSwgbmV3VGV4dHVyZXNMaXN0LCBuZXdHZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gRGlzcG9zZSB0aG9zZSB1bnNlZCByZXNvdXJjZXMuXHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHRleHR1cmVzTGlzdCk7XHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIGdlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSBuZXdUZXh0dXJlc0xpc3Q7XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IG5ld0dlb21ldHJpZXNMaXN0O1xyXG59O1xyXG5cclxuXHJcbmZ1bmN0aW9uIG1hcmtVbnVzZWQocmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc291cmNlTGlzdFtpXS5fX3VzZWQgPSAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHJlc291cmNlTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoIXJlc291cmNlTGlzdFtpXS5fX3VzZWQpIHtcclxuICAgICAgICAgICAgcmVzb3VyY2VMaXN0W2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlVXNlZChyZXNvdXJjZSwgbGlzdCkge1xyXG4gICAgcmVzb3VyY2UuX191c2VkID0gcmVzb3VyY2UuX191c2VkIHx8IDA7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQrKztcclxuICAgIGlmIChyZXNvdXJjZS5fX3VzZWQgPT09IDEpIHtcclxuICAgICAgICAvLyBEb24ndCBwdXNoIHRvIHRoZSBsaXN0IHR3aWNlLlxyXG4gICAgICAgIGxpc3QucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29sbGVjdFJlc291cmNlcyhzY2VuZSwgdGV4dHVyZVJlc291cmNlTGlzdCwgZ2VvbWV0cnlSZXNvdXJjZUxpc3QpIHtcclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICB2YXIgcHJldkdlb21ldHJ5O1xyXG4gICAgc2NlbmUudHJhdmVyc2UoZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETyBvcHRpbWl6ZSEhXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbCAhPT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVXNlZCh2YWxba10sIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSAhPT0gcHJldkdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKGdlb21ldHJ5LCBnZW9tZXRyeVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICBwcmV2R2VvbWV0cnkgPSBnZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIC8vIFRyYWNrIEFtYmllbnRDdWJlbWFwXHJcbiAgICAgICAgaWYgKHNjZW5lLmxpZ2h0c1trXS5jdWJlbWFwKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVVzZWQoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXAsIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogTG9hZCBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9dHJ1ZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBTPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBTfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFQ9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFR9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5tYWdGaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWFnRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZXhwb3N1cmVdIE9ubHkgYmUgdXNlZCB3aGVuIHNvdXJjZSBpcyBhIEhEUiBpbWFnZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbdXNlQ2FjaGVdIElmIHVzZSBjYWNoZS5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZSgnZGlmZnVzZU1hcC5qcGcnKVxyXG4gKiAgICAgIC50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgICAgIG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIHRleHR1cmUpO1xyXG4gKiAgICAgIH0pO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzLCB1c2VDYWNoZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JbWFnZUxpa2UodXJsT3JJbWcpO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RleENhY2hlLmdldChrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXhDYWNoZS5nZXQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIFByb21pc2UgP1xyXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSBzZWxmLmxvYWRUZXh0dXJlU3luYyh1cmxPckltZywgb3B0cyk7XHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4Q2FjaGUucHV0KGtleSwgcHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycsIHtcclxuICogICAgICBhbmlzb3Ryb3BpYzogOCxcclxuICogICAgICBmbGlwWTogZmFsc2VcclxuICogIH0pO1xyXG4gKiAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVTeW5jID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzKSB7XHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQob3B0cyk7XHJcbiAgICBpZiAodHlwZW9mIHVybE9ySW1nID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh1cmxPckltZy5tYXRjaCgvLmhkciR8XmRhdGE6YXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vKSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZVV0aWwubG9hZFRleHR1cmUodXJsT3JJbWcsIHtcclxuICAgICAgICAgICAgICAgIGV4cG9zdXJlOiBvcHRzICYmIG9wdHMuZXhwb3N1cmUsXHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZTogJ2hkcidcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50cmlnZ2VyKCdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVtrZXldID0gb3B0c1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJsT3JJbWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzSW1hZ2VMaWtlRWxlbWVudCh1cmxPckltZykpIHtcclxuICAgICAgICB0ZXh0dXJlLmltYWdlID0gdXJsT3JJbWc7XHJcbiAgICAgICAgdGV4dHVyZS5keW5hbWljID0gdXJsT3JJbWcgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSkudGhlbihmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gKiAgICAgIHNreWJveC5zZXRFbnZpcm9ubWVudE1hcCh0ZXh0dXJlKTtcclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKGltZ0xpc3QsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IHRoaXMubG9hZFRleHR1cmVDdWJlU3luYyhpbWdMaXN0LCBvcHRzKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRleHR1cmVDdWJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGV4dHVyZUN1YmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmVDdWJlKTtcclxuICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPWZhbHNlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAqIEBleGFtcGxlXHJcbiAqICB2YXIgdGV4dHVyZSA9IGFwcC5sb2FkVGV4dHVyZUN1YmVTeW5jKHtcclxuICogICAgICBweDogJ3NreWJveC9weC5qcGcnLCBweTogJ3NreWJveC9weS5qcGcnLCBwejogJ3NreWJveC9wei5qcGcnLFxyXG4gKiAgICAgIG54OiAnc2t5Ym94L254LmpwZycsIG55OiAnc2t5Ym94L255LmpwZycsIG56OiAnc2t5Ym94L256LmpwZydcclxuICogIH0pO1xyXG4gKiAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlQ3ViZVN5bmMgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBvcHRzLmZsaXBZID0gb3B0cy5mbGlwWSB8fCBmYWxzZTtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZShvcHRzKTtcclxuICAgIGlmICghaW1nTGlzdCB8fCAhaW1nTGlzdC5weCB8fCAhaW1nTGlzdC5ueCB8fCAhaW1nTGlzdC5weSB8fCAhaW1nTGlzdC5ueSB8fCAhaW1nTGlzdC5weiB8fCAhaW1nTGlzdC5ueikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjdWJlbWFwIGZvcm1hdC4gU2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgcHgsbngscHksbnkscHosbnonKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaW1nTGlzdC5weCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5sb2FkKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGV4dHVyZUN1YmUuaW1hZ2UgPSB1dGlsLmNsb25lKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmVDdWJlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG1hdGVyaWFsLlxyXG4gKiBAcGFyYW0ge09iamVjdHxTdGFuZGFyZE1hdGVyaWFsTVJDb25maWd9IG1hdGVyaWFsQ29uZmlnLiBtYXRlcmlhbENvbmZpZyBjb250YWlucyBgc2hhZGVyYCwgYHRyYW5zcGFyZW50YCBhbmQgdW5pZm9ybXMgdGhhdCB1c2VkIGluIGNvcnJlc3BvbmRpbmcgdW5pZm9ybXMuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pZm9ybXMgY2FuIGJlIGBjb2xvcmAsIGBhbHBoYWAgYGRpZmZ1c2VNYXBgIGV0Yy5cclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtzaGFkZXI9J2NsYXkuc3RhbmRhcmRNUiddIERlZmF1bHQgdG8gYmUgc3RhbmRhcmQgc2hhZGVyIHdpdGggbWV0YWxuZXNzIGFuZCByb3VnaG5lc3Mgd29ya2Zsb3cuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50PWZhbHNlXSBJZiBtYXRlcmlhbCBpcyB0cmFuc3BhcmVudC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RleHR1cmVGbGlwWT10cnVlXSBJZiBmbGlwIHkgb2YgdGV4dHVyZS5cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3RleHR1cmVMb2FkZWRdIENhbGxiYWNrIHdoZW4gc2luZ2xlIHRleHR1cmUgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZXNSZWFkeV0gQ2FsbGJhY2sgd2hlbiBhbGwgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTWF0ZXJpYWwgPSBmdW5jdGlvbiAobWF0Q29uZmlnKSB7XHJcbiAgICBtYXRDb25maWcgPSBtYXRDb25maWcgfHwge307XHJcbiAgICBtYXRDb25maWcuc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZE1SJztcclxuICAgIHZhciBzaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyID8gbWF0Q29uZmlnLnNoYWRlciA6IHNoYWRlckxpYnJhcnkuZ2V0KG1hdENvbmZpZy5zaGFkZXIpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBpZiAobWF0Q29uZmlnLm5hbWUpIHtcclxuICAgICAgICBtYXRlcmlhbC5uYW1lID0gbWF0Q29uZmlnLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRleHR1cmVzTG9hZGluZyA9IFtdO1xyXG4gICAgZnVuY3Rpb24gbWFrZVRleHR1cmVTZXR0ZXIoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQgJiYgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQoa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAobWF0ZXJpYWwudW5pZm9ybXNba2V5XSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gbWF0Q29uZmlnW2tleV07XHJcbiAgICAgICAgICAgIGlmICgobWF0ZXJpYWwudW5pZm9ybXNba2V5XS50eXBlID09PSAndCcgfHwgaXNJbWFnZUxpa2VFbGVtZW50KHZhbCkpXHJcbiAgICAgICAgICAgICAgICAmJiAhKHZhbCBpbnN0YW5jZW9mIFRleHR1cmUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvYWQgYSB0ZXh0dXJlLlxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNMb2FkaW5nLnB1c2godGhpcy5sb2FkVGV4dHVyZSh2YWwsIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IG1hdENvbmZpZy50ZXh0dXJlQ29udmVydFRvUE9UIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaXBZOiBtYXRDb25maWcudGV4dHVyZUZsaXBZID09IG51bGwgPyB0cnVlIDogbWF0Q29uZmlnLnRleHR1cmVGbGlwWVxyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtYWtlVGV4dHVyZVNldHRlcihrZXkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Q29uZmlnLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgbWF0Q29uZmlnLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgIG1hdENvbmZpZy50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmIChtYXRDb25maWcudGV4dHVyZXNSZWFkeSkge1xyXG4gICAgICAgIFByb21pc2UuYWxsKHRleHR1cmVzTG9hZGluZykudGhlbihmdW5jdGlvbiAodGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVzUmVhZHkodGV4dHVyZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXRlcmlhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjdWJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGgsIGhlaWdodCBhbmQgZGVwdGggZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSB3aGl0ZSBjdWJlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZ2VvS2V5ID0gJ2N1YmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgY3ViZSA9IHRoaXMuX2dlb0NhY2hlLmdldChnZW9LZXkpO1xyXG4gICAgaWYgKCFjdWJlKSB7XHJcbiAgICAgICAgY3ViZSA9IG5ldyBDdWJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goY3ViZSwgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCB0aGF0IGNhbWVyYSBpcyBpbnNpZGUgdGhlIGN1YmUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUgaW5zaWRlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmVJbnNpZGUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmVJbnNpZGUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZUluc2lkZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICBpbnNpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXSxcclxuICAgICAgICAgICAgZGVwdGhTZWdtZW50czogc3ViZGl2WzJdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3ViZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgY3ViZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BoZXJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdWJkaXZpc2lvbj0yMF0gU3ViZGl2aXNpb24gb2Ygc3BoZXJlLlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSBzZW1pLXRyYW5zcGFyZW50IHNwaGVyZS5cclxuICogIGFwcC5jcmVhdGVTcGhlcmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMCwgMCwgMV0sXHJcbiAqICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAqICAgICAgYWxwaGE6IDAuNVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcGhlcmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdmlzaW9uKSB7XHJcbiAgICBpZiAoc3ViZGl2aXNpb24gPT0gbnVsbCkge1xyXG4gICAgICAgIHN1YmRpdmlzaW9uID0gMjA7XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3NwaGVyZS0nICsgc3ViZGl2aXNpb247XHJcbiAgICB2YXIgc3BoZXJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXNwaGVyZSkge1xyXG4gICAgICAgIHNwaGVyZSA9IG5ldyBTcGhlcmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZpc2lvbiAqIDIsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZpc2lvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwaGVyZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgc3BoZXJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goc3BoZXJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vLyBUT0RPIG1heSBiZSBtb2RpZmllZD9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBsYW5lIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBwbGFuZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSByZWQgY29sb3IgcGxhbmUuXHJcbiAqICBhcHAuY3JlYXRlUGxhbmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMSwgMCwgMF1cclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGxhbmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdl07XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3BsYW5lLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIHBsYW5lR2VvID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXBsYW5lR2VvKSB7XHJcbiAgICAgICAgcGxhbmVHZW8gPSBuZXcgUGxhbmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV1cclxuICAgICAgICB9KTtcclxuICAgICAgICBwbGFuZUdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgcGxhbmVHZW8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChwbGFuZUdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBtZXNoIHdpdGggcGFyYW1ldHJpYyBzdXJmYWNlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBnZW5lcmF0b3JcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnhcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnpcclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci51PVswLCAxLCAwLjA1XV1cclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBhcmFtZXRyaWNTdXJmYWNlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBnZW5lcmF0b3IpIHtcclxuICAgIHZhciBnZW8gPSBuZXcgUGFyYW1ldHJpY1N1cmZhY2VHZW8oe1xyXG4gICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdG9yXHJcbiAgICB9KTtcclxuICAgIGdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBnZW5lcmFsIG1lc2ggd2l0aCBnaXZlbiBnZW9tZXRyeSBpbnN0YW5jZSBhbmQgbWF0ZXJpYWwgY29uZmlnLlxyXG4gKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNZXNoID0gZnVuY3Rpb24gKGdlb21ldHJ5LCBtYXQsIHBhcmVudE5vZGUpIHtcclxuICAgIHZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0IGluc3RhbmNlb2YgTWF0ZXJpYWwgPyBtYXQgOiB0aGlzLmNyZWF0ZU1hdGVyaWFsKG1hdClcclxuICAgIH0pO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG1lc2gpO1xyXG4gICAgcmV0dXJuIG1lc2g7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGVtcHR5IG5vZGVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHBhcmVudE5vZGVcclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG5vZGUpO1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcGVyc3BlY3RpdmUgb3Igb3J0aG9ncmFwaGljIGNhbWVyYSBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSB0YXJnZXRcclxuICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPVwicGVyc3BlY3RpdmVcIl0gQ2FuIGJlICdwZXJzcGVjdGl2ZScgb3IgJ29ydGhvZ3JhcGhpYycoaW4gc2hvcnQgJ29ydGhvJylcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IFtleHRlbnRdIEV4dGVudCBpcyBhdmFpbGFibGUgb25seSBpZiB0eXBlIGlzIG9ydGhvZ3JhcGhpYy5cclxuICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV8Y2xheS5jYW1lcmEuT3J0aG9ncmFwaGljfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUNhbWVyYSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgdGFyZ2V0LCB0eXBlLCBleHRlbnQpIHtcclxuICAgIHZhciBDYW1lcmFDdG9yO1xyXG4gICAgdmFyIGlzT3J0aG8gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSAnb3J0aG8nIHx8IHR5cGUgPT09ICdvcnRob2dyYXBoaWMnKSB7XHJcbiAgICAgICAgaXNPcnRobyA9IHRydWU7XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IE9ydGhvZ3JhcGhpY0NhbWVyYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlICYmIHR5cGUgIT09ICdwZXJzcGVjdGl2ZScpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGNhbWVyYSB0eXBlICcgKyB0eXBlICsgJy4gVXNlIGRlZmF1bHQgcGVyc3BlY3RpdmUgY2FtZXJhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIENhbWVyYUN0b3IgPSBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2FtZXJhID0gbmV3IENhbWVyYUN0b3IoKTtcclxuICAgIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uY29weShwb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgY2FtZXJhLmxvb2tBdCh0YXJnZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlbnQgJiYgaXNPcnRobykge1xyXG4gICAgICAgIGV4dGVudCA9IGV4dGVudC5hcnJheSB8fCBleHRlbnQ7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtZXh0ZW50WzBdIC8gMjtcclxuICAgICAgICBjYW1lcmEucmlnaHQgPSBleHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBleHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtZXh0ZW50WzFdIC8gMjtcclxuICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGV4dGVudFsyXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLnJlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zY2VuZS5hZGQoY2FtZXJhKTtcclxuXHJcbiAgICByZXR1cm4gY2FtZXJhO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGRpcmVjdGlvbmFsIGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gZGlyIEEgVmVjdG9yMyBvciBhcnJheSB0byByZXByZXNlbnQgdGhlIGRpcmVjdGlvbi5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5XSBJbnRlbnNpdHkgb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0KFstMSwgLTEsIC0xXSwgJyNmZmYnLCAyKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0ID0gZnVuY3Rpb24gKGRpciwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoKTtcclxuICAgIGlmIChkaXIgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgZGlyID0gZGlyLmFycmF5O1xyXG4gICAgfVxyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkoZGlyKS5uZWdhdGUoKTtcclxuICAgIGxpZ2h0Lmxvb2tBdChWZWN0b3IzLlpFUk8pO1xyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BvdCBsaWdodCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBzcG90IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW3RhcmdldF0gVGFyZ2V0IHBvc2l0aW9uIHdoZXJlIHNwb3QgbGlnaHQgcG9pbnRzIHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTIwXSBGYWxsb2ZmIHJhbmdlIG9mIHNwb3QgbGlnaHQuIERlZmF1bHQgdG8gYmUgMjAuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBzcG90IGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdW1icmFBbmdsZT0zMF0gVW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAzMCBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGVudW1icmFBbmdsZT00NV0gUGVudW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSA0NSBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICBhcHAuY3JlYXRlU3BvdExpZ2h0KFs1LCA1LCA1XSwgWzAsIDAsIDBdLCAyMCwgIzkwMCk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlU3BvdExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5LCB1bWJyYUFuZ2xlLCBwZW51bWJyYUFuZ2xlKSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgU3BvdExpZ2h0KCk7XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgbGlnaHQubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG4gICAgdW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC51bWJyYUFuZ2xlID0gdW1icmFBbmdsZSk7XHJcbiAgICBwZW51bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSBwZW51bWJyYUFuZ2xlKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgcG9pbnQgbGlnaHQuLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTEwMF0gRmFsbG9mZiByYW5nZSBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBwb2ludCBsaWdodC5cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQb2ludExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCByYW5nZSwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yKGNvbG9yKTtcclxuICAgIH1cclxuICAgIHJhbmdlICE9IG51bGwgJiYgKGxpZ2h0LnJhbmdlID0gcmFuZ2UpO1xyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBhbWJpZW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRMaWdodCA9IGZ1bmN0aW9uIChjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KCk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBjdWJlbWFwIGFtYmllbnQgbGlnaHQgYW5kIGFuIHNwaGVyaWNhbCBoYXJtb25pYyBhbWJpZW50IGxpZ2h0XHJcbiAqIGZvciBzcGVjdWxhciBhbmQgZGlmZnVzZSBsaWdodGluZyBpbiBQQlIgcmVuZGVyaW5nXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfFRleHR1cmVDdWJlfSBbZW52SW1hZ2VdIFBhbm9yYW1hIGVudmlyb25tZW50IGltYWdlLCBIRFIgZm9ybWF0IGlzIGJldHRlci4gT3IgYSBwcmUgbG9hZGVkIHRleHR1cmUgY3ViZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NwZWN1bGFySW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBzcGVjdWxhciBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtkaWZmdXNlSW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBkaWZmdXNlIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2V4cG9zdXJlPTFdIEV4cG9zdXJlIG9mIEhEUiBpbWFnZS4gT25seSBpZiBpbWFnZSBpbiBmaXJzdCBwYXJhbXRlciBpcyBIRFIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZT0zMl0gVGhlIHNpemUgb2YgcHJlZmlsZXJ0ZWQgY3ViZW1hcC4gTGFyZ2VyIHZhbHVlIHdpbGwgdGFrZSBtb3JlIHRpbWUgdG8gZG8gZXhwZW5zaXZlIHByZWZpbHRlcmluZy5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVBbWJpZW50Q3ViZW1hcExpZ2h0ID0gZnVuY3Rpb24gKGVudkltYWdlLCBzcGVjSW50ZW5zaXR5LCBkaWZmSW50ZW5zaXR5LCBleHBvc3VyZSwgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICBleHBvc3VyZSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9IDMyO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcblxyXG4gICAgdmFyIGxvYWRQcm9taXNlO1xyXG4gICAgaWYgKGVudkltYWdlLnRleHR1cmVUeXBlID09PSAndGV4dHVyZUN1YmUnKSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSBlbnZJbWFnZS5pc1JlbmRlcmFibGUoKVxyXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShlbnZJbWFnZSlcclxuICAgICAgICAgICAgOiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBlbnZJbWFnZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVudkltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxvYWRQcm9taXNlID0gdGhpcy5sb2FkVGV4dHVyZShlbnZJbWFnZSwge1xyXG4gICAgICAgICAgICBleHBvc3VyZTogZXhwb3N1cmVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbihmdW5jdGlvbiAoZW52VGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBzcGVjTGlnaHQgPSBuZXcgQW1iaWVudEN1YmVtYXBMaWdodCh7XHJcbiAgICAgICAgICAgIGludGVuc2l0eTogc3BlY0ludGVuc2l0eSAhPSBudWxsID8gc3BlY0ludGVuc2l0eSA6IDAuN1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwZWNMaWdodC5jdWJlbWFwID0gZW52VGV4dHVyZTtcclxuICAgICAgICBlbnZUZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAgICAgLy8gVE9ETyBDYWNoZSBwcmVmaWx0ZXIgP1xyXG4gICAgICAgIHNwZWNMaWdodC5wcmVmaWx0ZXIoc2VsZi5yZW5kZXJlciwgMzIpO1xyXG5cclxuICAgICAgICB2YXIgZGlmZkxpZ2h0ID0gbmV3IEFtYmllbnRTSExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBkaWZmSW50ZW5zaXR5ICE9IG51bGwgPyBkaWZmSW50ZW5zaXR5IDogMC43LFxyXG4gICAgICAgICAgICBjb2VmZmljaWVudHM6IHNoVXRpbC5wcm9qZWN0RW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlbmRlcmVyLCBzcGVjTGlnaHQuY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZDogMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NlbmUuYWRkKHNwZWNMaWdodCk7XHJcbiAgICAgICAgc2NlbmUuYWRkKGRpZmZMaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNwZWN1bGFyOiBzcGVjTGlnaHQsXHJcbiAgICAgICAgICAgIGRpZmZ1c2U6IGRpZmZMaWdodCxcclxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZUZXh0dXJlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIExvYWQgYSBbZ2xURl0oaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGKSBmb3JtYXQgbW9kZWwuXHJcbiAqIFlvdSBjYW4gY29udmVydCBGQlgvREFFL09CSiBmb3JtYXQgbW9kZWxzIHRvIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIHdpdGggW2ZieDJnbHRmXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5Z2wjZmJ4LXRvLWdsdGYyMC1jb252ZXJ0ZXIpIHB5dGhvbiBzY3JpcHQsXHJcbiAqIG9yIHNpbXBseSB1c2luZyB0aGUgW0NsYXkgVmlld2VyXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5LXZpZXdlcikgY2xpZW50IGFwcGxpY2F0aW9uLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfGNsYXkuU2hhZGVyfSBbb3B0cy5zaGFkZXI9J2NsYXkuc3RhbmRhcmQnXSAnYmFzaWMnfCdsYW1iZXJ0J3wnc3RhbmRhcmQnLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLndhaXRUZXh0dXJlTG9hZGVkPWZhbHNlXSBJZiBhZGQgdG8gc2NlbmUgdXRpbCB0ZXh0dXJlcyBhcmUgYWxsIGxvYWRlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5hdXRvUGxheUFuaW1hdGlvbj10cnVlXSBJZiBhdXRvcGxheSB0aGUgYW5pbWF0aW9uIG9mIG1vZGVsLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVwQXhpcz0neSddIENoYW5nZSBtb2RlbCB0byB5IHVwIGlmIHVwQXhpcyBpcyAneidcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlRmxpcFk9ZmFsc2VdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMudGV4dHVyZVJvb3RQYXRoXSBSb290IHBhdGggb2YgdGV4dHVyZS4gRGVmYXVsdCB0byBiZSByZWxhdGl2ZSB3aXRoIGdsVEYgZmlsZS5cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0aGF0IG1vZGVsIHdpbGwgYmUgbW91bnRlZC4gRGVmYXVsdCB0byBiZSBzY2VuZVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRNb2RlbCA9IGZ1bmN0aW9uICh1cmwsIG9wdHMsIHBhcmVudE5vZGUpIHtcclxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVUkwuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgb3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2hhZGVyID0gb3B0cy5zaGFkZXIgfHwgJ2NsYXkuc3RhbmRhcmQnO1xyXG5cclxuICAgIHZhciBsb2FkZXJPcHRzID0ge1xyXG4gICAgICAgIHJvb3ROb2RlOiBuZXcgTm9kZSgpLFxyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgIHRleHR1cmVSb290UGF0aDogb3B0cy50ZXh0dXJlUm9vdFBhdGgsXHJcbiAgICAgICAgY3Jvc3NPcmlnaW46ICdBbm9ueW1vdXMnLFxyXG4gICAgICAgIHRleHR1cmVGbGlwWTogb3B0cy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdHMudXBBeGlzICYmIG9wdHMudXBBeGlzLnRvTG93ZXJDYXNlKCkgPT09ICd6Jykge1xyXG4gICAgICAgIGxvYWRlck9wdHMucm9vdE5vZGUucm90YXRpb24uaWRlbnRpdHkoKS5yb3RhdGVYKC1NYXRoLlBJIC8gMik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxvYWRlciA9IG5ldyBHTFRGTG9hZGVyKGxvYWRlck9wdHMpO1xyXG5cclxuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5hZGQocmVzdWx0LnJvb3ROb2RlKTtcclxuICAgICAgICAgICAgaWYgKG9wdHMuYXV0b1BsYXlBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jbGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9hZGVyLnN1Y2Nlc3MoZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRzLndhaXRUZXh0dXJlTG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWQocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHJlc3VsdC50ZXh0dXJlcy5tYXAoZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmVycm9yKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIubG9hZCh1cmwpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuLy8gVE9ETyBjbG9uZU1vZGVsXHJcblxyXG4vKipcclxuICogU2ltaWxhciB0byBgYXBwLnNjZW5lLmNsb25lTm9kZWAsIGV4Y2VwdCBpdCB3aWxsIG1vdW50IHRoZSBjbG9uZWQgbm9kZSB0byB0aGUgc2NlbmUgYXV0b21hdGljYWxseS5cclxuICogU2VlIG1vcmUgaW4ge0BsaW5rIGNsYXkuU2NlbmUjY2xvbmVOb2RlfVxyXG4gKlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbmV3IGNsb25lZCBub2RlIHdpbGwgYmUgbW91bnRlZC5cclxuICogICAgICAgICAgRGVmYXVsdCB0byBoYXZlIHNhbWUgcGFyZW50IHdpdGggc291cmNlIG5vZGUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgbm9kZS5nZXRQYXJlbnQoKTtcclxuXHJcbiAgICB2YXIgbmV3Tm9kZSA9IHRoaXMuc2NlbmUuY2xvbmVOb2RlKG5vZGUsIHBhcmVudE5vZGUpO1xyXG4gICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICBwYXJlbnROb2RlLmFkZChuZXdOb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3Tm9kZTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBBcHAzRDogQXBwM0QsXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIDNEIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBtYW5hZ2UgdGhlIGFwcCBpbml0aWFsaXphdGlvbiBhbmQgbG9vcC5cclxuICAgICAqXHJcbiAgICAgKiBTZWUgbW9yZSBkZXRhaWxzIGF0IHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gICAgICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyNhcHAnLCB7XHJcbiAgICAgKiAgICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAqICAgICAgICAgIGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgKiAgICAgICAgICB2YXIgY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYSgpO1xyXG4gICAgICogICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAyKTtcclxuICAgICAqICAgICAgfSxcclxuICAgICAqICAgICAgbG9vcDogZnVuY3Rpb24gKCkgeyAvLyBub29wIH1cclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChkb20sIGFwcE5TKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBcHAzRChkb20sIGFwcE5TKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgbm90aWZpZXIgZnJvbSAnLi4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdXRpbCAgZnJvbSAnLi4vY29yZS91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza1xyXG4gKiBAbWl4ZXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG5mdW5jdGlvbiBUYXNrKCkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSBmYWxzZTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgc3VjY2Vzc2VkXHJcbiAqIEBwYXJhbSB7fSBkYXRhXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IHRydWU7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbn07XHJcbi8qKlxyXG4gKiBUYXNrIGZhaWxlZFxyXG4gKiBAcGFyYW0ge30gZXJyXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihlcnIpIHtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2Z1bGxmaWxsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCBlcnIpO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBzdWNjZXNzZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzRnVsbGZpbGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNSZWplY3RlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzU2V0dGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQgfHwgdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZnVuY3Rpb24gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICB2YXIgdGFzayA9IG5ldyBUYXNrKCk7XHJcbiAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogcmVzcG9uc2VUeXBlLFxyXG4gICAgICAgIG9ubG9hZDogZnVuY3Rpb24ocmVzKSB7XHJcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25lcnJvcjogZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgICAgICAgICAgdGFzay5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhc2s7XHJcbn1cclxuLyoqXHJcbiAqIE1ha2UgYSB2ZW5kb3IucmVxdWVzdCB0YXNrXHJcbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R8b2JqZWN0W118c3RyaW5nW119IHVybFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtyZXNwb25zZVR5cGVdXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKCcuL2EuanNvbicpO1xyXG4gKiAgICAgdmFyIHRhc2sgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayh7XHJcbiAqICAgICAgICAgdXJsOiAnYi5iaW4nLFxyXG4gKiAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbJy4vYS5qc29uJywgJy4vYi5qc29uJ10pO1xyXG4gKiAgICAgdmFyIHRhc2tzID0gVGFzay5tYWtlUmVxdWVzdFRhc2soW1xyXG4gKiAgICAgICAgIHt1cmw6ICdhLmpzb24nfSxcclxuICogICAgICAgICB7dXJsOiAnYi5iaW4nLCByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9XHJcbiAqICAgICBdKTtcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfGNsYXkuYXN5bmMuVGFza1tdfVxyXG4gKi9cclxuVGFzay5tYWtlUmVxdWVzdFRhc2sgPSBmdW5jdGlvbih1cmwsIHJlc3BvbnNlVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayh1cmwsIHJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1cmwudXJsKSB7ICAgLy8gIENvbmZpZ3VyZSBvYmplY3RcclxuICAgICAgICB2YXIgb2JqID0gdXJsO1xyXG4gICAgICAgIHJldHVybiBtYWtlUmVxdWVzdFRhc2sob2JqLnVybCwgb2JqLnJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHsgIC8vIFVybCBsaXN0XHJcbiAgICAgICAgdmFyIHVybExpc3QgPSB1cmw7XHJcbiAgICAgICAgdmFyIHRhc2tzID0gW107XHJcbiAgICAgICAgdXJsTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdXJsLCByZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKE9iamVjdChvYmopID09PSBvYmopIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IG9iai51cmw7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGUgPSBvYmoucmVzcG9uc2VUeXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhc2tzLnB1c2gobWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhc2tzO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfVxyXG4gKi9cclxuVGFzay5tYWtlVGFzayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIG5ldyBUYXNrKCk7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGFzaztcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IFRhc2sgZnJvbSAnLi9UYXNrJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza0dyb3VwXHJcbiAqIEBleHRlbmRzIGNsYXkuYXN5bmMuVGFza1xyXG4gKi9cclxudmFyIFRhc2tHcm91cCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBUYXNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgdGhpcy5fdGFza3MgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHRoaXMuX3JlamVjdGVkTnVtYmVyID0gMDtcclxufTtcclxuXHJcbnZhciBDdG9yID0gZnVuY3Rpb24gKCl7fTtcclxuQ3Rvci5wcm90b3R5cGUgPSBUYXNrLnByb3RvdHlwZTtcclxuVGFza0dyb3VwLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XHJcblxyXG5UYXNrR3JvdXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGFza0dyb3VwO1xyXG5cclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBzdWNjZXNzZWQsIHRhc2sgY2FuIGFsc28gYmUgYW55IG5vdGlmaWVyIG9iamVjdCB3aGljaCB3aWxsIHRyaWdnZXIgc3VjY2VzcyBhbmQgZXJyb3IgZXZlbnRzLiBMaWtlIHtAbGluayBjbGF5LlRleHR1cmUyRH0sIHtAbGluayBjbGF5LlRleHR1cmVDdWJlfSwge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9LlxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQGNoYWluYWJsZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLy8gTG9hZCB0ZXh0dXJlIGxpc3RcclxuICogICAgIHZhciBsaXN0ID0gWydhLmpwZycsICdiLmpwZycsICdjLmpwZyddXHJcbiAqICAgICB2YXIgdGV4dHVyZXMgPSBsaXN0Lm1hcChmdW5jdGlvbiAoc3JjKSB7XHJcbiAqICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgICAgICB0ZXh0dXJlLmxvYWQoc3JjKTtcclxuICogICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIHRhc2tHcm91cCA9IG5ldyBjbGF5LmFzeW5jLlRhc2tHcm91cCgpO1xyXG4gKiAgICAgdGFza0dyb3VwLmFsbCh0ZXh0dXJlcykuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gRG8gc29tZSB0aGluZyBhZnRlciBhbGwgdGV4dHVyZXMgbG9hZGVkXHJcbiAqICAgICB9KTtcclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAvLyBTb21lIHRhc2tzIGxpa2UgdGV4dHVyZSwgbG9hZGVyIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGFza1xyXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgc3RhdGVzIGhlcmVcclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIgKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5yZWplY3QodGFzayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHBhcmFtICB7QXJyYXkuPGNsYXkuYXN5bmMuVGFzaz59IHRhc2tzXHJcbiAqIEByZXR1cm4ge2NsYXkuYXN5bmMuVGFza0dyb3VwfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGxTZXR0bGVkID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLl90YXNrcyA9IHRhc2tzO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhc2suX3JlamVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX3JlamVjdGVkTnVtYmVyKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIEdldCBzdWNjZXNzZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0RnVsZmlsbGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuRnVsZmlsbGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rhc2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGhpcy5fdGFza3NbaV07XHJcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBuRnVsZmlsbGVkICs9IHRhc2suZ2V0RnVsZmlsbGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbkZ1bGZpbGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlcjtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZmFpbGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFJlamVjdGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuUmVqZWN0ZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5SZWplY3RlZCArPSB0YXNrLmdldFJlamVjdGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmaW5pc2hlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRTZXR0bGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG5cclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblNldHRsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IHRhc2suZ2V0U2V0dGxlZE51bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYodGFzay5fcmVqZWN0ZWQgfHwgdGFzay5fZnVsZmlsbGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuU2V0dGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlciArIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0VGFza051bWJlciA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblRhc2sgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5UYXNrICs9IHRhc2suZ2V0VGFza051bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblRhc2s7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrcy5sZW5ndGg7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrR3JvdXA7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBOb2RlIG9mIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZy5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKi9cclxudmFyIENvbXBvc2l0b3JOb2RlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgaW5wdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPdXRwdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgb3V0cHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8vIFRPRE8gUmVtb3ZlIHBhcmFtZXRlciBmdW5jdGlvbiBjYWxsYmFja1xyXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICB2YXIgcGFyYW1ldGVycyA9IG91dHB1dEluZm8ucGFyYW1ldGVycztcclxuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcclxuICAgICAgICBpZiAoIXBhcmFtZXRlcnNDb3B5KSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHkgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5W2tleV0gPSBwYXJhbWV0ZXJzW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHdpZHRoLCBoZWlnaHQ7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlci5nbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7fSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgZ2V0T3V0cHV0OiBmdW5jdGlvbiAocmVuZGVyZXIgLypvcHRpb25hbCovLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCB0ZXh0dXJlIHdpdGhvdXQgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgIG5hbWUgPSByZW5kZXJlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICBpZiAoIW91dHB1dEluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFscmVhZHkgYmVlbiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEZvcmNlIHJldHVybiB0ZXh0dXJlIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyAgIC8vIFNvbHZlIENpcmN1bGFyIFJlZmVyZW5jZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmxhbmsgdGV4dHVyZSBhdCBmaXJzdCBwYXNzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShvdXRwdXRJbmZvLnBhcmFtZXRlcnMgfHwge30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBsaW5rOiBmdW5jdGlvbiAoaW5wdXRQaW5OYW1lLCBmcm9tTm9kZSwgZnJvbVBpbk5hbWUpIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJlbGF0aW9uc2hpcCBmcm9tIG91dHB1dCBwaW4gdG8gaW5wdXQgcGluIGlzIG9uZS1vbi1tdWx0aXBsZVxyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rc1tpbnB1dFBpbk5hbWVdID0ge1xyXG4gICAgICAgICAgICBub2RlOiBmcm9tTm9kZSxcclxuICAgICAgICAgICAgcGluOiBmcm9tUGluTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0pIHtcclxuICAgICAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgbm9kZTogdGhpcyxcclxuICAgICAgICAgICAgcGluOiBpbnB1dFBpbk5hbWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gRW5hYmxlZCB0aGUgcGluIHRleHR1cmUgaW4gc2hhZGVyXHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoaW5wdXRQaW5OYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlucHV0TGlua3MgPSB7fTtcclxuICAgICAgICB0aGlzLm91dHB1dExpbmtzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3JlbmRlcmluZykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgbGluay5ub2RlLnVwZGF0ZVJlZmVyZW5jZShsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0gKys7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiZWZvcmVGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBQdXQgYmFjayBhbGwgdGhlIHRleHR1cmVzIHRvIHBvb2xcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0TGlua3MpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21wb3NpdG9yTm9kZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdyYXBoTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR3JhcGggPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGgjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9kZXM6IFtdXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaC5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0byB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgZGlydHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGROb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ub2Rlcy5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGV8c3RyaW5nfSBub2RlXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBub2RlID0gdGhpcy5nZXROb2RlQnlOYW1lKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Tm9kZUJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZXNbaV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbGlua3Mgb2YgZ3JhcGhcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uY2xlYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJhdmVyc2UgYWxsIHRoZSBub2RlcyBhbmQgYnVpbGQgdGhlIGdyYXBoXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5ub2Rlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0c1tpbnB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXNzICYmICFub2RlLnBhc3MubWF0ZXJpYWwuaXNVbmlmb3JtRW5hYmxlZChpbnB1dE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaW4gJyAgKyBub2RlLm5hbWUgKyAnLicgKyBpbnB1dE5hbWUgKyAnIG5vdCB1c2VkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGZyb21QaW5JbmZvID0gbm9kZS5pbnB1dHNbaW5wdXROYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbiA9IHRoaXMuZmluZFBpbihmcm9tUGluSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJvbVBpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGluayhpbnB1dE5hbWUsIGZyb21QaW4ubm9kZSwgZnJvbVBpbi5waW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmcm9tUGluSW5mbyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlICcgKyBmcm9tUGluSW5mbyArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiBvZiAnICsgZnJvbVBpbkluZm8ubm9kZSArICcuJyArIGZyb21QaW5JbmZvLnBpbiArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBmaW5kUGluOiBmdW5jdGlvbiAoaW5wdXQpIHtcclxuICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAvLyBUcnkgdG8gdGFrZSBpbnB1dCBhcyBhIGRpcmVjdGx5IGEgbm9kZVxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgR3JhcGhOb2RlKSB7XHJcbiAgICAgICAgICAgIGlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgbm9kZTogaW5wdXRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQubm9kZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0bXAubmFtZSA9PT0gaW5wdXQubm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0bXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBpbnB1dC5ub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRQaW4gPSBpbnB1dC5waW47XHJcbiAgICAgICAgICAgIGlmICghaW5wdXRQaW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBmaXJzdCBwaW4gZGVmYXVsdGx5XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQaW4gPSBPYmplY3Qua2V5cyhub2RlLm91dHB1dHMpWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHNbaW5wdXRQaW5dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiBpbnB1dFBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHcmFwaDtcclxuIiwiaW1wb3J0IEdyYXBoIGZyb20gJy4vR3JhcGgnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi9UZXh0dXJlUG9vbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQ29tcG9zaXRvciBwcm92aWRlIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZ1xyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvciA9IEdyYXBoLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gT3V0cHV0IG5vZGVcclxuICAgICAgICBfb3V0cHV0czogW10sXHJcblxyXG4gICAgICAgIF90ZXh0dXJlUG9vbDogbmV3IFRleHR1cmVQb29sKCksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3IucHJvdG90eXBlICovXHJcbntcclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICBHcmFwaC5wcm90b3R5cGUuYWRkTm9kZS5jYWxsKHRoaXMsIG5vZGUpO1xyXG4gICAgICAgIG5vZGUuX2NvbXBvc2l0b3IgPSB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubm9kZXNbaV0ub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh0aGlzLm5vZGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmZXJlbmNlIG51bWJlciBvZiBlYWNoIG91dHB1dCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uYmVmb3JlRnJhbWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3V0cHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRzW2ldLnVwZGF0ZVJlZmVyZW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0ucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gQ2xlYXIgdXBcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5hZnRlckZyYW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhbGxvY2F0ZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVsZWFzZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGcmFtZUJ1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbXBvc2l0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3I7XHJcbiIsImltcG9ydCBDb21wb3NpdG9yTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgU2NlbmVOb2RlID0gQ29tcG9zaXRvck5vZGUuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGUjICovXHJcbntcclxuICAgIG5hbWU6ICdzY2VuZScsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBhdXRvVXBkYXRlU2NlbmU6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBwcmVaOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbn0sIHtcclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJJbmZvO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG5cclxuICAgICAgICAgICAgcmVuZGVySW5mbyA9IHJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLmNhbWVyYSwgIXRoaXMuYXV0b1VwZGF0ZVNjZW5lLCB0aGlzLnByZVopO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLmZyYW1lQnVmZmVyO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLnVwZGF0ZVBhcmFtZXRlcihuYW1lLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fY29tcG9zaXRvci5hbGxvY2F0ZVRleHR1cmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBfZ2xbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gcGFyc2VJbnQoYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICYmIGF0dGFjaG1lbnQgPD0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICsgOCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXh0LmRyYXdCdWZmZXJzRVhUKGJ1ZnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBbHdheXMgY2xlYXJcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVCB8IGdsZW51bS5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCByZW5kZXJJbmZvKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lTm9kZTtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgVGV4dHVyZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGV4dHVyZTogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gVGV4dHVyZSBub2RlIG11c3QgaGF2ZSBvdXRwdXQgd2l0aG91dCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge31cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbn0sIHtcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciwgbmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERvIG5vdGhpbmdcclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZU5vZGU7XHJcbiIsIi8vIFRPRE8gU2hhZGVyIGxpYnJhcnlcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi9QYXNzJztcclxuaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLy8gVE9ETyBjdXJsbm9pc2UgZGVtbyB3cm9uZ1xyXG5cclxuLy8gUEVORElOR1xyXG4vLyBVc2UgdG9wb2xvZ2ljYWwgc29ydCA/XHJcblxyXG4vKipcclxuICogRmlsdGVyIG5vZGVcclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5GaWx0ZXJOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgdmFyIG5vZGUgPSBuZXcgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUoe1xyXG4gICAgICAgIG5hbWU6ICdmeGFhJyxcclxuICAgICAgICBzaGFkZXI6IGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmZ4YWEnKSxcclxuICAgICAgICBpbnB1dHM6IHtcclxuICAgICAgICAgICAgdGV4dHVyZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6ICdzY2VuZScsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiAnY29sb3InXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIE11bHRpcGxlIG91dHB1dHMgaXMgcHJlc2VydmVkIGZvciBNUlQgc3VwcG9ydCBpbiBXZWJHTDIuMFxyXG4gICAgICAgIG91dHB1dHM6IHtcclxuICAgICAgICAgICAgY29sb3I6IHtcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IGNsYXkuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDBcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGNsYXkuVGV4dHVyZS5SR0JBLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MTJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvLyBOb2RlIHdpbGwga2VlcCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIGtlZXBMYXN0RnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbm9kZSBvdXRwdXQgdGhlIFJUVCByZW5kZXJlZCBpbiBsYXN0IGZyYW1lXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRMYXN0RnJhbWU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKlxyXG4gICAgKi9cclxudmFyIEZpbHRlck5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0czoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0czogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkZXI6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuY29tcG9zaXRvci5QYXNzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhc3M6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHRoaXMuc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFzcyA9IHBhc3M7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRUZXh0dXJlID0gbGluay5ub2RlLmdldE91dHB1dChyZW5kZXJlciwgbGluay5waW4pO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShpbnB1dE5hbWUsIGlucHV0VGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE91dHB1dFxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5vdXRwdXRzID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJhbWV0ZXJzLndpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50IHx8IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoYXR0YWNobWVudCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgYXR0YWNobWVudCBjaGFuZ2VzIGluIGRpZmZlcmVudCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmF0dGFjaChcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLCBhdHRhY2htZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGRhdGEgb2YgdGV4dHVyZSBpcyBjaGFuZ2VkIG92ZXIgdGltZSxcclxuICAgICAgICAgICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICBsaW5rLm5vZGUucmVtb3ZlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMud2lkdGggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMuaGVpZ2h0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpZHRoID0gTWF0aC5jZWlsKHdpZHRoKTtcclxuICAgICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxyXG4gICAgICAgICAgICB8fCBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgIT09IGhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc0NvcHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKG5hbWUsIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJhbWV0ZXIgdmFsdWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICovXHJcbiAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFzcy5nZXRVbmlmb3JtKG5hbWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyczogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIG9ialtuYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIC8qKlxyXG4gICAgLy8gICogU2V0IHNoYWRlciBjb2RlXHJcbiAgICAvLyAgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAgICAvLyAgKi9cclxuICAgIC8vIHNldFNoYWRlcjogZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgLy8gICAgIHZhciBtYXRlcmlhbCA9IHRoaXMucGFzcy5tYXRlcmlhbDtcclxuICAgIC8vICAgICBtYXRlcmlhbC5zaGFkZXIuc2V0RnJhZ21lbnQoc2hhZGVyU3RyKTtcclxuICAgIC8vICAgICBtYXRlcmlhbC5hdHRhY2hTaGFkZXIobWF0ZXJpYWwuc2hhZGVyLCB0cnVlKTtcclxuICAgIC8vIH0sXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIHh4eCk7XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdmFsXVxyXG4gICAgICovXHJcbiAgICBkZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wsIHZhbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sLCB2YWwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIENvbXBvc2l0b3JOb2RlLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBEZWZhdWx0IGRpc2FibGUgYWxsIHRleHR1cmVcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZGlzYWJsZVRleHR1cmVzQWxsKCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb2xvcmFkanVzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBjbGFtcCh0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCAoY29sb3ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggY29sb3IgKiBwb3coMi4wLCBleHBvc3VyZSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggcG93KGNvbG9yLCB2ZWMzKGdhbW1hKSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KCBjb2xvciwgdyApO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0bmVzc1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuY29udHJhc3RcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9ICh0ZXgucmdiLXZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5leHBvc3VyZVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICogcG93KDIuMCwgZXhwb3N1cmUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYW1tYVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBnYW1tYSA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBwb3codGV4LnJnYiwgdmVjMyhnYW1tYSkpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5zYXR1cmF0aW9uXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoY29sb3IsIHcpO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFs5XTtcXG5nYXVzc2lhbktlcm5lbFswXSA9IDAuMDc7XFxuZ2F1c3NpYW5LZXJuZWxbMV0gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzJdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFszXSA9IDAuMTQ7XFxuZ2F1c3NpYW5LZXJuZWxbNF0gPSAwLjE2O1xcbmdhdXNzaWFuS2VybmVsWzVdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs2XSA9IDAuMTI7XFxuZ2F1c3NpYW5LZXJuZWxbN10gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzhdID0gMC4wNztcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzEzXFxuZmxvYXQgZ2F1c3NpYW5LZXJuZWxbMTNdO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wMjtcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjEzO1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjExO1xcbmdhdXNzaWFuS2VybmVsWzldID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFsxMF0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzExXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMTJdID0gMC4wMjtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1clxcbiNkZWZpbmUgU0hBREVSX05BTUUgZ2F1c3NpYW5fYmx1clxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7dmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDIuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG51bmlmb3JtIGZsb2F0IGJsdXJEaXIgOiAwLjA7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbiAodm9pZClcXG57XFxuIEBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmtlcm5lbC5nYXVzc2lhbl85XFxuIHZlYzIgb2ZmID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4gb2ZmICo9IHZlYzIoMS4wIC0gYmx1ckRpciwgYmx1ckRpcik7XFxuIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcbiBmbG9hdCB3ZWlnaHRBbGwgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7XFxuIGZsb2F0IHcgPSBnYXVzc2lhbktlcm5lbFtpXTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZmxvYXQoaSAtIDQpICogb2ZmKSk7XFxuIHN1bSArPSB0ZXhlbCAqIHc7XFxuIHdlaWdodEFsbCArPSB3O1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzdW0gLyBtYXgod2VpZ2h0QWxsLCAwLjAxKSk7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIubG9nX2x1bVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gbHVtaW5hbmNlID0gbG9nKGx1bWluYW5jZSArIDAuMDAxKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sdW1fYWRhcHRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBhZGFwdGVkTHVtO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGN1cnJlbnRMdW07XFxudW5pZm9ybSBmbG9hdCBmcmFtZVRpbWUgOiAwLjAyO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgZkFkYXB0ZWRMdW0gPSBkZWNvZGVIRFIodGV4dHVyZTJEKGFkYXB0ZWRMdW0sIHZlYzIoMC41LCAwLjUpKSkucjtcXG4gZmxvYXQgZkN1cnJlbnRMdW0gPSBleHAoZW5jb2RlSERSKHRleHR1cmUyRChjdXJyZW50THVtLCB2ZWMyKDAuNSwgMC41KSkpLnIpO1xcbiBmQWRhcHRlZEx1bSArPSAoZkN1cnJlbnRMdW0gLSBmQWRhcHRlZEx1bSkgKiAoMS4wIC0gcG93KDAuOTgsIDMwLjAgKiBmcmFtZVRpbWUpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhmQWRhcHRlZEx1bSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QodGV4LnJnYiwgdyk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHV0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsb29rdXA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiBmbG9hdCBibHVlQ29sb3IgPSB0ZXguYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXgucik7XFxuIHRleFBvczEueSA9IChxdWFkMS55ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXguZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjNCBuZXdDb2xvcjEgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MxKTtcXG4gdmVjNCBuZXdDb2xvcjIgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MyKTtcXG4gdmVjNCBuZXdDb2xvciA9IG1peChuZXdDb2xvcjEsIG5ld0NvbG9yMiwgZnJhY3QoYmx1ZUNvbG9yKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobmV3Q29sb3IucmdiLCB0ZXgudyk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci52aWduZXR0ZVxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGRhcmtuZXNzOiAxO1xcbnVuaWZvcm0gZmxvYXQgb2Zmc2V0OiAxO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiO1xcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMihvZmZzZXQpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNChtaXgodGV4ZWwucmdiLCB2ZWMzKDEuMCAtIGRhcmtuZXNzKSwgZG90KHV2LCB1dikpLCB0ZXhlbC5hKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5vdXRwdXRcXG4jZGVmaW5lIE9VVFBVVF9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4LnJnYjtcXG4jaWZkZWYgT1VUUFVUX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hID0gdGV4LmE7XFxuI2Vsc2VcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHRocmVzaG9sZCA6IDE7XFxudW5pZm9ybSBmbG9hdCBzY2FsZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemU6IFs1MTIsIDUxMl07XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuY29uc3QgdmVjMyBsdW1XZWlnaHQgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWM0IG1lZGlhbih2ZWM0IGEsIHZlYzQgYiwgdmVjNCBjKVxcbntcXG4gcmV0dXJuIGEgKyBiICsgYyAtIG1pbihtaW4oYSwgYiksIGMpIC0gbWF4KG1heChhLCBiKSwgYyk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIGQgPSAxLjAgLyB0ZXh0dXJlU2l6ZS54eXggKiB2ZWMzKDEuMCwgMS4wLCAwLjApO1xcbiB2ZWM0IHMxID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eikpO1xcbiB2ZWM0IHMyID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eikpO1xcbiB2ZWM0IHMzID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiB2ZWM0IHM0ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiB0ZXhlbCA9IG1lZGlhbihtZWRpYW4odGV4ZWwsIHMxLCBzMiksIHMzLCBzNCk7XFxuI2VuZGlmXFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IgLCBsdW1XZWlnaHQpO1xcbiB2ZWM0IGNvbG9yO1xcbiBpZiAobHVtID4gdGhyZXNob2xkICYmIHRleGVsLmEgPiAwLjApXFxuIHtcXG4gY29sb3IgPSB2ZWM0KHRleGVsLnJnYiAqIHNjYWxlLCB0ZXhlbC5hICogc2NhbGUpO1xcbiB9XFxuIGVsc2VcXG4ge1xcbiBjb2xvciA9IHZlYzQoMC4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG93bnNhbXBsZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuZmxvYXQgYnJpZ2h0bmVzcyh2ZWMzIGMpXFxue1xcbiByZXR1cm4gbWF4KG1heChjLnIsIGMuZyksIGMuYik7XFxufVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIHMxID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSkucmdiO1xcbiB2ZWMzIHMyID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSkucmdiO1xcbiB2ZWMzIHMzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkucmdiO1xcbiB2ZWMzIHM0ID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkucmdiO1xcbiBmbG9hdCBzMXcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMSkgKyAxLjApO1xcbiBmbG9hdCBzMncgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMikgKyAxLjApO1xcbiBmbG9hdCBzM3cgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMykgKyAxLjApO1xcbiBmbG9hdCBzNHcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzNCkgKyAxLjApO1xcbiBmbG9hdCBvbmVEaXZpZGVTdW0gPSAxLjAgLyAoczF3ICsgczJ3ICsgczN3ICsgczR3KTtcXG4gdmVjNCBjb2xvciA9IHZlYzQoXFxuIChzMSAqIHMxdyArIHMyICogczJ3ICsgczMgKiBzM3cgKyBzNCAqIHM0dykgKiBvbmVEaXZpZGVTdW0sXFxuIDEuMFxcbiApO1xcbiNlbHNlXFxuIHZlYzQgY29sb3IgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gY29sb3IgKj0gMC4yNTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGNvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnVwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIsIDUxMl07XFxudW5pZm9ybSBmbG9hdCBzYW1wbGVTY2FsZTogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5jbGFtcF9zYW1wbGVcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICkpICogNC4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDE2LjApO1xcbiNlbHNlXFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgKzEuMCwgKzEuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5O1xcbiB2ZWM0IHM7XFxuIHMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHMgLyA0LjApO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmNvbXBvc2l0ZVxcbiNkZWZpbmUgVE9ORU1BUFBJTkdcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbiNpZmRlZiBCTE9PTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYmxvb207XFxuI2VuZGlmXFxuI2lmZGVmIExFTlNGTEFSRV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2ZsYXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNkaXJ0O1xcbiNlbmRpZlxcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1bTtcXG4jZW5kaWZcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsdXQ7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZURhcmtuZXNzOiAxLjA7XFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZU9mZnNldDogMS4wO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgZXhwb3N1cmUgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBibG9vbUludGVuc2l0eSA6IDAuMjU7XFxudW5pZm9ybSBmbG9hdCBsZW5zZmxhcmVJbnRlbnNpdHkgOiAxO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52ZWMzIEFDRVNUb25lTWFwcGluZyh2ZWMzIGNvbG9yKVxcbntcXG4gY29uc3QgZmxvYXQgQSA9IDIuNTE7XFxuIGNvbnN0IGZsb2F0IEIgPSAwLjAzO1xcbiBjb25zdCBmbG9hdCBDID0gMi40MztcXG4gY29uc3QgZmxvYXQgRCA9IDAuNTk7XFxuIGNvbnN0IGZsb2F0IEUgPSAwLjE0O1xcbiByZXR1cm4gKGNvbG9yICogKEEgKiBjb2xvciArIEIpKSAvIChjb2xvciAqIChDICogY29sb3IgKyBEKSArIEUpO1xcbn1cXG5mbG9hdCBleWVBZGFwdGlvbihmbG9hdCBmTHVtKVxcbntcXG4gcmV0dXJuIG1peCgwLjIsIGZMdW0sIDAuNSk7XFxufVxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnZlYzMgbHV0VHJhbnNmb3JtKHZlYzMgY29sb3IpIHtcXG4gZmxvYXQgYmx1ZUNvbG9yID0gY29sb3IuYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWMyIHRleFBvczI7XFxuIHRleFBvczIueCA9IChxdWFkMi54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsdXQsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsdXQsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gcmV0dXJuIG5ld0NvbG9yLnJnYjtcXG59XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gdmVjNCgwLjApO1xcbiB2ZWM0IG9yaWdpbmFsVGV4ZWwgPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkVfRU5BQkxFRFxcbiB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBvcmlnaW5hbFRleGVsID0gdGV4ZWw7XFxuI2VuZGlmXFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG4gdmVjNCBibG9vbVRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpO1xcbiB0ZXhlbC5yZ2IgKz0gYmxvb21UZXhlbC5yZ2IgKiBibG9vbUludGVuc2l0eTtcXG4gdGV4ZWwuYSArPSBibG9vbVRleGVsLmEgKiBibG9vbUludGVuc2l0eTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG4gdGV4ZWwgKz0gZGVjb2RlSERSKHRleHR1cmUyRChsZW5zZmxhcmUsIHZfVGV4Y29vcmQpKSAqIHRleHR1cmUyRChsZW5zZGlydCwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHk7XFxuI2VuZGlmXFxuIHRleGVsLmEgPSBtaW4odGV4ZWwuYSwgMS4wKTtcXG4jaWZkZWYgTFVNX0VOQUJMRURcXG4gZmxvYXQgZkx1bSA9IHRleHR1cmUyRChsdW0sIHZlYzIoMC41LCAwLjUpKS5yO1xcbiBmbG9hdCBhZGFwdGVkTHVtRGVzdCA9IDMuMCAvIChtYXgoMC4xLCAxLjAgKyAxMC4wKmV5ZUFkYXB0aW9uKGZMdW0pKSk7XFxuIGZsb2F0IGV4cG9zdXJlQmlhcyA9IGFkYXB0ZWRMdW1EZXN0ICogZXhwb3N1cmU7XFxuI2Vsc2VcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gZXhwb3N1cmU7XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIHRleGVsLnJnYiAqPSBleHBvc3VyZUJpYXM7XFxuIHRleGVsLnJnYiA9IEFDRVNUb25lTWFwcGluZyh0ZXhlbC5yZ2IpO1xcbiNlbmRpZlxcbiB0ZXhlbCA9IGxpbmVhclRvc1JHQih0ZXhlbCk7XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxuIHRleGVsLnJnYiA9IGx1dFRyYW5zZm9ybShjbGFtcCh0ZXhlbC5yZ2IsdmVjMygwLjApLHZlYzMoMS4wKSkpO1xcbiNlbmRpZlxcbiNpZmRlZiBDT0xPUl9DT1JSRUNUSU9OXFxuIHRleGVsLnJnYiA9IGNsYW1wKHRleGVsLnJnYiArIHZlYzMoYnJpZ2h0bmVzcyksIDAuMCwgMS4wKTtcXG4gdGV4ZWwucmdiID0gY2xhbXAoKHRleGVsLnJnYiAtIHZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IsIHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSkpO1xcbiB0ZXhlbC5yZ2IgPSBtaXgodmVjMyhsdW0pLCB0ZXhlbC5yZ2IsIHNhdHVyYXRpb24pO1xcbiNlbmRpZlxcbiNpZmRlZiBWSUdORVRURVxcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMih2aWduZXR0ZU9mZnNldCk7XFxuIHRleGVsLnJnYiA9IG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gdmlnbmV0dGVEYXJrbmVzcyksIGRvdCh1diwgdXYpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHRleGVsKTtcXG4jaWZkZWYgREVCVUdcXG4gI2lmIERFQlVHID09IDFcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpKTtcXG4gI2VsaWYgREVCVUcgPT0gMlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpICogYmxvb21JbnRlbnNpdHkpO1xcbiAjZWxpZiBERUJVRyA9PSAzXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHkpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuIGlmIChvcmlnaW5hbFRleGVsLmEgPD0gMC4wMSAmJiBnbF9GcmFnQ29sb3IuYSA+IDFlLTUpIHtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBkb3QoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIH1cXG4jaWZkZWYgUFJFTVVMVElQTFlfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcXG4jZW5kaWZcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmxlbnNmbGFyZVxcbiNkZWZpbmUgU0FNUExFX05VTUJFUiA4XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zY29sb3I7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IGRpc3BlcnNhbCA6IDAuMztcXG51bmlmb3JtIGZsb2F0IGhhbG9XaWR0aCA6IDAuNDtcXG51bmlmb3JtIGZsb2F0IGRpc3RvcnRpb24gOiAxLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgdGV4dHVyZURpc3RvcnRlZChcXG4gaW4gdmVjMiB0ZXhjb29yZCxcXG4gaW4gdmVjMiBkaXJlY3Rpb24sXFxuIGluIHZlYzMgZGlzdG9ydGlvblxcbikge1xcbiByZXR1cm4gdmVjNChcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24ucikpLnIsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmcpKS5nLFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5iKSkuYixcXG4gMS4wXFxuICk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHRleGNvb3JkID0gLXZfVGV4Y29vcmQgKyB2ZWMyKDEuMCk7IHZlYzIgdGV4dHVyZU9mZnNldCA9IDEuMCAvIHRleHR1cmVTaXplO1xcbiB2ZWMyIGdob3N0VmVjID0gKHZlYzIoMC41KSAtIHRleGNvb3JkKSAqIGRpc3BlcnNhbDtcXG4gdmVjMiBoYWxvVmVjID0gbm9ybWFsaXplKGdob3N0VmVjKSAqIGhhbG9XaWR0aDtcXG4gdmVjMyBkaXN0b3J0aW9uID0gdmVjMygtdGV4dHVyZU9mZnNldC54ICogZGlzdG9ydGlvbiwgMC4wLCB0ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uKTtcXG4gdmVjNCByZXN1bHQgPSB2ZWM0KDAuMCk7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKVxcbiB7XFxuIHZlYzIgb2Zmc2V0ID0gZnJhY3QodGV4Y29vcmQgKyBnaG9zdFZlYyAqIGZsb2F0KGkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIG9mZnNldCkgLyBsZW5ndGgodmVjMigwLjUpKTtcXG4gd2VpZ2h0ID0gcG93KDEuMCAtIHdlaWdodCwgMTAuMCk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIH1cXG4gcmVzdWx0ICo9IHRleHR1cmUyRChsZW5zY29sb3IsIHZlYzIobGVuZ3RoKHZlYzIoMC41KSAtIHRleGNvb3JkKSkgLyBsZW5ndGgodmVjMigwLjUpKSk7XFxuIGZsb2F0IHdlaWdodCA9IGxlbmd0aCh2ZWMyKDAuNSkgLSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpO1xcbiByZXN1bHQgKz0gdGV4dHVyZURpc3RvcnRlZChvZmZzZXQsIG5vcm1hbGl6ZShnaG9zdFZlYyksIGRpc3RvcnRpb24pICogd2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IgPSByZXN1bHQ7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5ibGVuZFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYmxlbmRcXG4jaWZkZWYgVEVYVFVSRTFfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUxO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTJfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUyO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTNfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUzO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MyA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU0O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NCA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTVfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU1O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTZfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU2O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NiA6IDEuMDtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdmVjNCgwLjApO1xcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUxLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQxO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUyLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQyO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUzLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQzO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU0LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ0O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU1LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ1O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU2LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ2O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmZ4YWFcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbiNkZWZpbmUgRlhBQV9SRURVQ0VfTUlOICgxLjAvMTI4LjApXFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NVUwgKDEuMC84LjApXFxuI2RlZmluZSBGWEFBX1NQQU5fTUFYIDguMFxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiByZXNvbHV0aW9uID0gMS4wIC8gdmlld3BvcnQuenc7XFxuIHZlYzMgcmdiTlcgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JORSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDEuMCwgLTEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU1cgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYlNFID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWM0IHJnYmFNID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKSApO1xcbiB2ZWMzIHJnYk0gPSByZ2JhTS54eXo7XFxuIGZsb2F0IG9wYWNpdHkgPSByZ2JhTS53O1xcbiB2ZWMzIGx1bWEgPSB2ZWMzKCAwLjI5OSwgMC41ODcsIDAuMTE0ICk7XFxuIGZsb2F0IGx1bWFOVyA9IGRvdCggcmdiTlcsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU5FID0gZG90KCByZ2JORSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hU1cgPSBkb3QoIHJnYlNXLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTRSA9IGRvdCggcmdiU0UsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU0gPSBkb3QoIHJnYk0sIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU1pbiA9IG1pbiggbHVtYU0sIG1pbiggbWluKCBsdW1hTlcsIGx1bWFORSApLCBtaW4oIGx1bWFTVywgbHVtYVNFICkgKSApO1xcbiBmbG9hdCBsdW1hTWF4ID0gbWF4KCBsdW1hTSwgbWF4KCBtYXgoIGx1bWFOVywgbHVtYU5FKSAsIG1heCggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIHZlYzIgZGlyO1xcbiBkaXIueCA9IC0oKGx1bWFOVyArIGx1bWFORSkgLSAobHVtYVNXICsgbHVtYVNFKSk7XFxuIGRpci55ID0gKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcbiBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoICggbHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFICkgKiAoIDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwgKSwgRlhBQV9SRURVQ0VfTUlOICk7XFxuIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvICggbWluKCBhYnMoIGRpci54ICksIGFicyggZGlyLnkgKSApICsgZGlyUmVkdWNlICk7XFxuIGRpciA9IG1pbiggdmVjMiggRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuIG1heCggdmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiBkaXIgKiByY3BEaXJNaW4pKSAqIHJlc29sdXRpb247XFxuIHZlYzMgcmdiQSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAxLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICs9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAyLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICo9IDAuNTtcXG4gdmVjMyByZ2JCID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAtMC41ICkgKS54eXo7XFxuIHJnYkIgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAwLjUgKSApLnh5ejtcXG4gcmdiQiAqPSAwLjI1O1xcbiByZ2JCICs9IHJnYkEgKiAwLjU7XFxuIGZsb2F0IGx1bWFCID0gZG90KCByZ2JCLCBsdW1hICk7XFxuIGlmICggKCBsdW1hQiA8IGx1bWFNaW4gKSB8fCAoIGx1bWFCID4gbHVtYU1heCApIClcXG4ge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JBLCBvcGFjaXR5ICk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkIsIG9wYWNpdHkgKTtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBjb2xvcmFkanVzdEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzJztcclxuaW1wb3J0IGJsdXJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYmx1ci5nbHNsLmpzJztcclxuaW1wb3J0IGx1bUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdW0uZ2xzbC5qcyc7XHJcbmltcG9ydCBsdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvbHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgdmlnZW50dGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYnJpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzJztcclxuaW1wb3J0IGRvd25zYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZG93bnNhbXBsZS5nbHNsLmpzJztcclxuaW1wb3J0IHVwc2FtcGxlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgaGRyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzJztcclxuaW1wb3J0IGxlbnNmbGFyZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCBibGVuZEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibGVuZC5nbHNsLmpzJztcclxuaW1wb3J0IGZ4YWFFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzJztcclxuLy8gaW1wb3J0IGZ4YWEzRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Z4YWEzLmdsc2wuanMnO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihTaGFkZXIpIHtcclxuICAgIC8vIFNvbWUgYnVpbGQgaW4gc2hhZGVyc1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShjb2xvcmFkanVzdEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibHVyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1bUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odmlnZW50dGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10ob3V0cHV0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJyaWdodEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShkb3duc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKHVwc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGhkckVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsZW5zZmxhcmVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYmxlbmRFc3NsKTtcclxuXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGZ4YWFFc3NsKTtcclxuXHJcbn0iLCJpbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBDb21wb3NpdG9yIGZyb20gJy4vY29tcG9zaXRvci9Db21wb3NpdG9yJztcclxuaW1wb3J0IENvbXBvU2NlbmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9TY2VuZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9UZXh0dXJlTm9kZSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9GaWx0ZXJOb2RlIGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuXHJcbnJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IoU2hhZGVyKTtcclxuXHJcbnZhciBzaGFkZXJTb3VyY2VSZWcgPSAvXiNzb3VyY2VcXCgoLio/KVxcKS87XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jcmVhdGVDb21wb3NpdG9yXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yfVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRvcihqc29uLCBvcHRzKSB7XHJcbiAgICB2YXIgY29tcG9zaXRvciA9IG5ldyBDb21wb3NpdG9yKCk7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgbGliID0ge1xyXG4gICAgICAgIHRleHR1cmVzOiB7fSxcclxuICAgICAgICBwYXJhbWV0ZXJzOiB7fVxyXG4gICAgfTtcclxuICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbihzaGFkZXJMaWIsIHRleHR1cmVMaWIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24ubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVJbmZvID0ganNvbi5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVOb2RlKG5vZGVJbmZvLCBsaWIsIG9wdHMpO1xyXG4gICAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29tcG9zaXRvci5hZGROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKHZhciBuYW1lIGluIGpzb24ucGFyYW1ldGVycykge1xyXG4gICAgICAgIHZhciBwYXJhbUluZm8gPSBqc29uLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgbGliLnBhcmFtZXRlcnNbbmFtZV0gPSBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbyk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIGxvYWQgdGV4dHVyZSBhc3luY2hyb25vdXNcclxuICAgIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGZ1bmN0aW9uKHRleHR1cmVMaWIpIHtcclxuICAgICAgICBsaWIudGV4dHVyZXMgPSB0ZXh0dXJlTGliO1xyXG4gICAgICAgIGFmdGVyTG9hZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbXBvc2l0b3I7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cykge1xyXG4gICAgdmFyIHR5cGUgPSBub2RlSW5mby50eXBlIHx8ICdmaWx0ZXInO1xyXG4gICAgdmFyIHNoYWRlclNvdXJjZTtcclxuICAgIHZhciBpbnB1dHM7XHJcbiAgICB2YXIgb3V0cHV0cztcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ2ZpbHRlcicpIHtcclxuICAgICAgICB2YXIgc2hhZGVyRXhwID0gbm9kZUluZm8uc2hhZGVyLnRyaW0oKTtcclxuICAgICAgICB2YXIgcmVzID0gc2hhZGVyU291cmNlUmVnLmV4ZWMoc2hhZGVyRXhwKTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IFNoYWRlci5zb3VyY2UocmVzWzFdLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNoYWRlckV4cC5jaGFyQXQoMCkgPT09ICcjJykge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBsaWIuc2hhZGVyc1tzaGFkZXJFeHAuc3Vic3RyKDEpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzaGFkZXJTb3VyY2UpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gc2hhZGVyRXhwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChub2RlSW5mby5pbnB1dHMpIHtcclxuICAgICAgICBpbnB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGVJbmZvLmlucHV0c1tuYW1lXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IG5vZGVJbmZvLmlucHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlSW5mby5pbnB1dHNbbmFtZV0ubm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5waW5cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgIG91dHB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSBub2RlSW5mby5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICBvdXRwdXRzW25hbWVdID0ge307XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmF0dGFjaG1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5hdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5rZWVwTGFzdEZyYW1lID0gb3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLm91dHB1dExhc3RGcmFtZSA9IG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ucGFyYW1ldGVycyA9IGNvbnZlcnRQYXJhbWV0ZXIob3V0cHV0SW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBub2RlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdzY2VuZScpIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvU2NlbmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2NlbmU6IG9wdHMuc2NlbmUsXHJcbiAgICAgICAgICAgIGNhbWVyYTogb3B0cy5jYW1lcmEsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0dXJlJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9UZXh0dXJlTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIERlZmF1bHQgaXMgZmlsdGVyXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyU291cmNlLFxyXG4gICAgICAgICAgICBpbnB1dHM6IGlucHV0cyxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5wYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpYi50ZXh0dXJlc1t2YWwuc3Vic3RyKDEpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlcmVuZGVyJywgY3JlYXRlU2l6ZVNldEhhbmRsZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLm9uKCdiZWZvcmVyZW5kZXInLCB2YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZUluZm8uZGVmaW5lcyAmJiBub2RlLnBhc3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5kZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gbm9kZUluZm8uZGVmaW5lc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIG5vZGUucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgbmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBub2RlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0V2lkdGhGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiB3aWR0aDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SGVpZ2h0RnVuYyh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbykge1xyXG4gICAgdmFyIHBhcmFtID0ge307XHJcbiAgICBpZiAoIXBhcmFtSW5mbykge1xyXG4gICAgICAgIHJldHVybiBwYXJhbTtcclxuICAgIH1cclxuICAgIFsndHlwZScsICdtaW5GaWx0ZXInLCAnbWFnRmlsdGVyJywgJ3dyYXBTJywgJ3dyYXBUJywgJ2ZsaXBZJywgJ3VzZU1pcG1hcCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIGVudW1cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IFRleHR1cmVbdmFsXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgdmFyIHNpemVTY2FsZSA9IHBhcmFtSW5mby5zY2FsZSB8fCAxO1xyXG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtSW5mb1tuYW1lXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IGNyZWF0ZVNpemVQYXJzZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHRyeUNvbnZlcnRFeHByKHZhbCksIHNpemVTY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgaWYgKCFwYXJhbS53aWR0aCkge1xyXG4gICAgICAgIHBhcmFtLndpZHRoID0gZGVmYXVsdFdpZHRoRnVuYztcclxuICAgIH1cclxuICAgIGlmICghcGFyYW0uaGVpZ2h0KSB7XHJcbiAgICAgICAgcGFyYW0uaGVpZ2h0ID0gZGVmYXVsdEhlaWdodEZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtSW5mby51c2VNaXBtYXAgIT0gbnVsbCkge1xyXG4gICAgICAgIHBhcmFtLnVzZU1pcG1hcCA9IHBhcmFtSW5mby51c2VNaXBtYXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoIWpzb24udGV4dHVyZXMpIHtcclxuICAgICAgICBjYWxsYmFjayh7fSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHRleHR1cmVzID0ge307XHJcbiAgICB2YXIgbG9hZGluZyA9IDA7XHJcblxyXG4gICAgdmFyIGNiZCA9IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVSb290UGF0aCA9IG9wdHMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uKHRleHR1cmVJbmZvLCBuYW1lKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0ZXh0dXJlSW5mby5wYXRoO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcih0ZXh0dXJlSW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSAmJiBwYXRoLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5tYXAoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKGl0ZW0sIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCB0ZXh0dXJlUm9vdFBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZS5sb2FkKHBhdGgpO1xyXG4gICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICB0ZXh0dXJlLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICAgICAgICAgICAgICBjYmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAobG9hZGluZyA9PT0gMCAmJiAhY2JkKSB7XHJcbiAgICAgICAgY2FsbGJhY2sodGV4dHVyZXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplU2V0SGFuZGxlcihuYW1lLCBleHByRnVuYykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgdmlld3BvcnQgc2l6ZSBvciB3aW5kb3cgc2l6ZVxyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgLy8gUEVORElORyBJZiBtdWx0aXBseSBkcHIgP1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIHJlc3VsdCk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplUGFyc2VyKG5hbWUsIGV4cHJGdW5jLCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKSAqIHNjYWxlO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSByZW5kZXJlci5nZXRIZWlnaHQoKSAqIHNjYWxlO1xyXG4gICAgICAgIHJldHVybiBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJ5Q29udmVydEV4cHIoc3RyaW5nKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB2YXIgZXhwclJlcyA9IC9eZXhwclxcKCguKilcXCkkLy5leGVjKHN0cmluZyk7XHJcbiAgICBpZiAoZXhwclJlcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBmdW5jID0gbmV3IEZ1bmN0aW9uKCd3aWR0aCcsICdoZWlnaHQnLCAnZHByJywgJ3JldHVybiAnICsgZXhwclJlc1sxXSk7XHJcbiAgICAgICAgICAgIC8vIFRyeSBydW4gdFxyXG4gICAgICAgICAgICBmdW5jKDEsIDEpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHByZXNzaW9uLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciBmcm9tICcuLi9jcmVhdGVDb21wb3NpdG9yJztcclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjsiLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdDtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxudmFyeWluZyB2ZWMzIHZfVGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9CaXRhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFRISVJEX1BBU1NcXG51bmlmb3JtIG1hdDQgcHJldldvcmxkVmlld1Byb2plY3Rpb247XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcXG5tYXQ0IGdldFByZXZTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gZ2V0U2tpbk1hdHJpeChwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgcHJldlNraW5NYXRyaXhbSk9JTlRfQ09VTlRdO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBwcmV2U2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHByZXZTa2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4gYm9vbCBoYXNUYW5nZW50ID0gZG90KHRhbmdlbnQsIHRhbmdlbnQpID4gMC4wO1xcbiNlbmRpZlxcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2lmZGVmIEZJUlNUX1BBU1NcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiBpZiAoaGFzVGFuZ2VudCkge1xcbiBza2lubmVkVGFuZ2VudCA9IChza2luTWF0cml4V1MgKiB2ZWM0KHRhbmdlbnQueHl6LCAwLjApKS54eXo7XFxuIH1cXG4gI2VuZGlmXFxuICNpZmRlZiBUSElSRF9QQVNTXFxuIHtcXG4gbWF0NCBwcmV2U2tpbk1hdHJpeFdTID0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG4gaWYgKHdlaWdodC55ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnkpICogd2VpZ2h0Lnk7IH1cXG4gaWYgKHdlaWdodC56ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7IH1cXG4gZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG4gaWYgKHdlaWdodFcgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXOyB9XFxuIHByZXZTa2lubmVkUG9zaXRpb24gPSAocHJldlNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChTRUNPTkRfUEFTUykgfHwgZGVmaW5lZChGSVJTVF9QQVNTKVxcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiNlbmRpZlxcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZfTm9ybWFsID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkpLnh5eik7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiB9XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuI2lmZGVmIFRISVJEX1BBU1NcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfUHJldlZpZXdQb3NpdGlvbiA9IHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwcmV2U2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMS5mcmFnbWVudFxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzcztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG51bmlmb3JtIHNhbXBsZXIyRCByb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaG5lc3M7XFxudW5pZm9ybSBib29sIGRvdWJsZVNpZGVkO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGFscGhhOiAxLjA7XFxudW5pZm9ybSBpbnQgcm91Z2hHbG9zc0NoYW5uZWw6IDA7XFxuZmxvYXQgaW5kZXhpbmdUZXhlbChpbiB2ZWM0IHRleGVsLCBpbiBpbnQgaWR4KSB7XFxuIGlmIChpZHggPT0gMykgcmV0dXJuIHRleGVsLmE7XFxuIGVsc2UgaWYgKGlkeCA9PSAxKSByZXR1cm4gdGV4ZWwuZztcXG4gZWxzZSBpZiAoaWR4ID09IDIpIHJldHVybiB0ZXhlbC5iO1xcbiBlbHNlIHJldHVybiB0ZXhlbC5yO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuIGlmIChkb3VibGVTaWRlZCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gZXllUG9zIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQpLmEgKiBhbHBoYTtcXG4gaWYgKGEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHZfVGV4Y29vcmQpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSBub3JtYWxUZXhlbCAqIDIuMCAtIDEuMDtcXG4gbWF0MyB0Ym4gPSBtYXQzKHZfVGFuZ2VudCwgdl9CaXRhbmdlbnQsIHZfTm9ybWFsKTtcXG4gTiA9IG5vcm1hbGl6ZSh0Ym4gKiBOKTtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoTiArIDEuMCkgKiAwLjU7XFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiBpZiAodXNlUm91Z2hHbG9zc01hcCkge1xcbiBmbG9hdCBnMiA9IGluZGV4aW5nVGV4ZWwodGV4dHVyZTJEKHJvdWdoR2xvc3NNYXAsIHZfVGV4Y29vcmQpLCByb3VnaEdsb3NzQ2hhbm5lbCk7XFxuIGlmICh1c2VSb3VnaG5lc3MpIHtcXG4gZzIgPSAxLjAgLSBnMjtcXG4gfVxcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IuYSA9IGcgKyAwLjAwNTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMi5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcXG51bmlmb3JtIGJvb2wgdXNlTWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gYm9vbCBsaW5lYXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxudm9pZCBtYWluKClcXG57XFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuIGlmICh1c2VNZXRhbG5lc3NNYXApIHtcXG4gdmVjNCBtZXRhbG5lc3NUZXhlbCA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHZfVGV4Y29vcmQpO1xcbiBtID0gY2xhbXAobWV0YWxuZXNzVGV4ZWwuciArIChtICogMi4wIC0gMS4wKSwgMC4wLCAxLjApO1xcbiB9XFxuIHZlYzQgdGV4ZWwgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCk7XFxuIGlmIChsaW5lYXIpIHtcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4ZWwuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiICogY29sb3I7XFxuIGdsX0ZyYWdDb2xvci5hID0gbSArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIzLmZyYWdtZW50XFxudW5pZm9ybSBib29sIGZpcnN0UmVuZGVyO1xcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9QcmV2Vmlld1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIGEgPSB2X1ZpZXdQb3NpdGlvbi54eSAvIHZfVmlld1Bvc2l0aW9uLnc7XFxuIHZlYzIgYiA9IHZfUHJldlZpZXdQb3NpdGlvbi54eSAvIHZfUHJldlZpZXdQb3NpdGlvbi53O1xcbiBpZiAoZmlyc3RSZW5kZXIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGVsc2Uge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KChhIC0gYikgKiAwLjUgKyAwLjUsIDAuMCwgMS4wKTtcXG4gfVxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIuZGVidWdcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlNDtcXG51bmlmb3JtIGludCBkZWJ1ZzogMDtcXG52b2lkIG1haW4gKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gaWYgKGRlYnVnID09IDApIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChOLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDEpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKHopLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSAzKSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhnbG9zc2luZXNzKSwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSA0KSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhtZXRhbG5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDUpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChhbGJlZG8sIDEuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmU0LCB1dik7XFxuIGNvbG9yLnJnIC09IDAuNTtcXG4gY29sb3IucmcgKj0gMi4wO1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzIgd2luZG93U2l6ZTogV0lORE9XX1NJWkU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0OiBWSUVXUE9SVDtcXG51bmlmb3JtIG1hdDQgdmlld1Byb2plY3Rpb25JbnY7XFxuI2lmZGVmIERFUFRIX0VOQ09ERURcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjMiB1djIgPSAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuenc7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiB2ZWM0IHRleGVsMyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIGZsb2F0IGdsb3NzaW5lc3MgPSB0ZXhlbDEuYTtcXG4gZmxvYXQgbWV0YWxuZXNzID0gdGV4ZWwzLmE7XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIGZsb2F0IHogPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUyLCB1dikuciAqIDIuMCAtIDEuMDtcXG4gdmVjMiB4eSA9IHV2MiAqIDIuMCAtIDEuMDtcXG4gdmVjNCBwcm9qZWN0ZWRQb3MgPSB2ZWM0KHh5LCB6LCAxLjApO1xcbiB2ZWM0IHA0ID0gdmlld1Byb2plY3Rpb25JbnYgKiBwcm9qZWN0ZWRQb3M7XFxuIHZlYzMgcG9zaXRpb24gPSBwNC54eXogLyBwNC53O1xcbiB2ZWMzIGFsYmVkbyA9IHRleGVsMy5yZ2I7XFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gYWxiZWRvICogKDEuMCAtIG1ldGFsbmVzcyk7XFxuIHZlYzMgc3BlY3VsYXJDb2xvciA9IG1peCh2ZWMzKDAuMDQpLCBhbGJlZG8sIG1ldGFsbmVzcyk7XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbmZsb2F0IERfUGhvbmcoaW4gZmxvYXQgZywgaW4gZmxvYXQgbmRoKSB7XFxuIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgciA9IDEuMCAtIGc7XFxuIGZsb2F0IGEgPSByICogcjtcXG4gZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiByZXR1cm4gYSAvICgzLjE0MTU5MjYgKiB0bXAgKiB0bXApO1xcbn1cXG52ZWMzIEZfU2NobGljayhpbiBmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbnZlYzMgbGlnaHRFcXVhdGlvbihcXG4gaW4gdmVjMyBsaWdodENvbG9yLCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwgaW4gdmVjMyBzcGVjdWxhckNvbG9yLFxcbiBpbiBmbG9hdCBuZGwsIGluIGZsb2F0IG5kaCwgaW4gZmxvYXQgbmR2LCBpbiBmbG9hdCBnXFxuKVxcbntcXG4gcmV0dXJuIG5kbCAqIGxpZ2h0Q29sb3JcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG5pbXBvcnQgZ2J1ZmZlckVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9nYnVmZmVyLmdsc2wuanMnO1xyXG5pbXBvcnQgY2h1bmtFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KGdidWZmZXJFc3NsKTtcclxuU2hhZGVyLmltcG9ydChjaHVua0Vzc2wpO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmlsbENhbnZhcyhjb2xvcikge1xyXG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZmlsbFN0eWxlID0gY29sb3IgfHwgJyMwMDAnO1xyXG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8vIFRPRE8gc3BlY3VsYXJDb2xvclxyXG4vLyBUT0RPIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50XHJcbmZ1bmN0aW9uIGdldEdldFVuaWZvcm1Ib29rMShkZWZhdWx0Tm9ybWFsTWFwLCBkZWZhdWx0Um91Z2huZXNzTWFwLCBkZWZhdWx0RGlmZnVzZU1hcCkge1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIGlmIChzeW1ib2wgPT09ICdkb3VibGVTaWRlZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAndXZSZXBlYXQnIHx8IHN5bWJvbCA9PT0gJ3V2T2Zmc2V0JyB8fCBzeW1ib2wgPT09ICdhbHBoYScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ25vcm1hbE1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE5vcm1hbE1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnZGlmZnVzZU1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdERpZmZ1c2VNYXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcclxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFscGhhQ3V0b2ZmIHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdXNlUm91Z2huZXNzV29ya2Zsb3cgPSBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICB2YXIgcm91Z2hHbG9zc01hcCA9IHVzZVJvdWdobmVzc1dvcmtmbG93ID8gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3JvdWdobmVzc01hcCcpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3NNYXAnKTtcclxuICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2dsb3NzaW5lc3MnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvdyA/ICgxLjAgLSBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzJykpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3MnKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JvdWdoR2xvc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhcm91Z2hHbG9zc01hcDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3VzZVJvdWdobmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc0NoYW5uZWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0RGVmaW5lKCdmcmFnbWVudCcsICdST1VHSE5FU1NfQ0hBTk5FTCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ0dMT1NTSU5FU1NfQ0hBTk5FTCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2syKGRlZmF1bHREaWZmdXNlTWFwLCBkZWZhdWx0TWV0YWxuZXNzTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmFibGUsIGdCdWZmZXJNYXQsIHN5bWJvbCkge1xyXG4gICAgICAgIHZhciBzdGFuZGFyZE1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3V2UmVwZWF0JzpcclxuICAgICAgICAgICAgY2FzZSAndXZPZmZzZXQnOlxyXG4gICAgICAgICAgICBjYXNlICdhbHBoYSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzJykgfHwgMDtcclxuICAgICAgICAgICAgY2FzZSAnZGlmZnVzZU1hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHRNZXRhbG5lc3NNYXA7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VzZU1ldGFsbmVzc01hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzTWFwJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpbmVhcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ1NSR0JfREVDT0RFJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhQ3V0b2ZmJzpcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFDdXRvZmYgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgnYWxwaGFDdXRvZmYnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMC4wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR0J1ZmZlciBpcyBwcm92aWRlZCBmb3IgZGVmZXJyZWQgcmVuZGVyaW5nIGFuZCBTU0FPLCBTU1IgcGFzcy5cclxuICogSXQgd2lsbCBkbyB0aHJlZSBwYXNzZXMgcmVuZGVyaW5nIHRvIGZvdXIgdGFyZ2V0IHRleHR1cmVzLiBTZWVcclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUxfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTJ9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlM31cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmU0fVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuZGVmZXJyZWQuR0J1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdCdWZmZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGNvbW1vblRleHR1cmVPcHRzID0ge1xyXG4gICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMTogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAyLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUyOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDMuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTM6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgNC5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlNDogZmFsc2UsXHJcblxyXG4gICAgICAgIHJlbmRlclRyYW5zcGFyZW50OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJSZW5kZXJMaXN0OiBbXSxcclxuICAgICAgICAvLyAtIFI6IG5vcm1hbC54XHJcbiAgICAgICAgLy8gLSBHOiBub3JtYWwueVxyXG4gICAgICAgIC8vIC0gQjogbm9ybWFsLnpcclxuICAgICAgICAvLyAtIEE6IGdsb3NzaW5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDE6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FUXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBkZXB0aFxyXG4gICAgICAgIF9nQnVmZmVyVGV4MjogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gZm9ybWF0OiBUZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCxcclxuICAgICAgICAgICAgLy8gdHlwZTogVGV4dHVyZS5VTlNJR05FRF9JTlRcclxuXHJcbiAgICAgICAgICAgIGZvcm1hdDogVGV4dHVyZS5ERVBUSF9TVEVOQ0lMLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBhbGJlZG8uclxyXG4gICAgICAgIC8vIC0gRzogYWxiZWRvLmdcclxuICAgICAgICAvLyAtIEI6IGFsYmVkby5iXHJcbiAgICAgICAgLy8gLSBBOiBtZXRhbG5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDM6IG5ldyBUZXh0dXJlMkQoY29tbW9uVGV4dHVyZU9wdHMpLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclRleDQ6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIEZMT0FUIFRleHR1cmUgaGFzIGJ1ZyBvbiBpT1MuIGlzIEhBTEZfRkxPQVQgZW5vdWdoP1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICBfZGVmYXVsdE5vcm1hbE1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjMDAwJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdFJvdWdobmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdE1ldGFsbmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdERpZmZ1c2VNYXA6IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY3JlYXRlRmlsbENhbnZhcygnI2ZmZicpXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwxOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIEZJUlNUX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwyOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgU0VDT05EX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDM6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgVEhJUkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kZWJ1Z1Bhc3M6IG5ldyBQYXNzKHtcclxuICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1ZycpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqL3tcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBHIEJ1ZmZlciBzaXplLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAgICAgKi9cclxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPT09IHdpZHRoXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9PT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDQud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5LFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwciB8fCAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdmlld3BvcnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB4OiAwLCB5OiAwLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2dCdWZmZXJUZXgxLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBHQnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBmcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcblxyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBnQnVmZmVyUmVuZGVyTGlzdCA9IHRoaXMuX2dCdWZmZXJSZW5kZXJMaXN0O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BhcXVlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW9wYXF1ZUxpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gb3BhcXVlTGlzdFtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUcmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BhcmVudExpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0W29mZnNldCsrXSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdC5sZW5ndGggPSBvZmZzZXQ7XHJcblxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMTtcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTIgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUyO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMyA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTM7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmU0ID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlNDtcclxuICAgICAgICBpZiAoIWVuYWJsZVRhcmdldFRleHR1cmUxICYmICFlbmFibGVUYXJnZXRUZXh0dXJlMyAmJiAhZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGRpc2FibGUgdGFyZ2V0VGV4dHVyZTEsIHRhcmdldFRleHR1cmUzLCB0YXJnZXRUZXh0dXJlNCBib3RoJyk7XHJcbiAgICAgICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gob3B0cy50YXJnZXRUZXh0dXJlMiB8fCB0aGlzLl9nQnVmZmVyVGV4MiwgcmVuZGVyZXIuZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFyVmlld3BvcnQoKSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBpc01hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbCAhPT0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HLCBzY2VuZS5ib3VuZGluZ0JveExhc3RGcmFtZSBuZWVkcyBiZSB1cGRhdGVkIGlmIGhhdmUgc2hhZG93XHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKHNjZW5lKTtcclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTEpIHtcclxuICAgICAgICAgICAgLy8gUGFzcyAxXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUxIHx8IHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMSA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDE7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazEodGhpcy5fZGVmYXVsdE5vcm1hbE1hcCwgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcCwgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSBNUlQgaWYgcG9zc2libGVcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMykge1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzcyAyXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUzIHx8IHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMiA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDI7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazIodGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAsIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmU0IHx8IHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSBqaXR0ZXJpbmcgaW4gdGVtcG9yYWwgYWEuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcuIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGdCdWZmZXJNYXRlcmlhbDMgPSB0aGlzLl9nQnVmZmVyTWF0ZXJpYWwzO1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhVmlld1Byb2ogPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGNhbWVyYVZpZXdQcm9qLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSwgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gcmVuZGVyYWJsZS5za2VsZXRvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50cyA9IHJlbmRlcmFibGUuam9pbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA+IHJlbmRlcmVyLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZTa2luTWF0cmljZXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VNaXBtYXA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwWTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzW2ldID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUud2lkdGggPSBza2luTWF0cmljZXNUZXh0dXJlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUuaGVpZ2h0ID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMocmVuZGVyYWJsZS5fX3VpZF9fLCBqb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5IHx8IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkubGVuZ3RoICE9PSBza2luTWF0cmljZXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShza2luTWF0cmljZXNBcnJheS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5zZXQoc2tpbk1hdHJpY2VzQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiA9IHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiB8fCBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3b3JsZCB0cmFuc2Zvcm0gb2Ygc2tpbm5lZCBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LmNvcHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiwgY2FtZXJhVmlld1Byb2osIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdwcmV2U2tpbk1hdHJpeCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cmljZXNUZXh0dXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdmaXJzdFJlbmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKG51bGwpO1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgb3V0cHV0IG9mIGdCdWZmZXIuIFVzZSBgdHlwZWAgcGFyYW1ldGVyIHRvIGNob29zIHRoZSBkZWJ1ZyBvdXRwdXQgdHlwZSwgd2hpY2ggY2FuIGJlOlxyXG4gICAgICpcclxuICAgICAqICsgJ25vcm1hbCdcclxuICAgICAqICsgJ2RlcHRoJ1xyXG4gICAgICogKyAncG9zaXRpb24nXHJcbiAgICAgKiArICdnbG9zc2luZXNzJ1xyXG4gICAgICogKyAnbWV0YWxuZXNzJ1xyXG4gICAgICogKyAnYWxiZWRvJ1xyXG4gICAgICogKyAndmVsb2NpdHknXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9J25vcm1hbCddXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIGNhbWVyYSwgdHlwZSwgdmlld3BvcnQpIHtcclxuICAgICAgICB2YXIgZGVidWdUeXBlcyA9IHtcclxuICAgICAgICAgICAgbm9ybWFsOiAwLFxyXG4gICAgICAgICAgICBkZXB0aDogMSxcclxuICAgICAgICAgICAgcG9zaXRpb246IDIsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3M6IDMsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogNCxcclxuICAgICAgICAgICAgYWxiZWRvOiA1LFxyXG4gICAgICAgICAgICB2ZWxvY2l0eTogNlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRlYnVnVHlwZXNbdHlwZV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biB0eXBlIFwiJyArIHR5cGUgKyAnXCInKTtcclxuICAgICAgICAgICAgLy8gRGVmYXVsdCB1c2Ugbm9ybWFsXHJcbiAgICAgICAgICAgIHR5cGUgPSAnbm9ybWFsJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLmNsZWFyQml0ID0gcmVuZGVyZXIuZ2wuREVQVEhfQlVGRkVSX0JJVDtcclxuXHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIGRlYnVnUGFzcyA9IHRoaXMuX2RlYnVnUGFzcztcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgW3JlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpXSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlclRleDIpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyVGV4Myk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlNCcsIHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZGVidWcnLCBkZWJ1Z1R5cGVzW3R5cGVdKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogbm9ybWFsLnggKiAwLjUgKyAwLjVcclxuICAgICAqICsgRzogbm9ybWFsLnkgKiAwLjUgKyAwLjVcclxuICAgICAqICsgQjogbm9ybWFsLnogKiAwLjUgKyAwLjVcclxuICAgICAqICsgQTogZ2xvc3NpbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUxOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzZWNvbmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGRlcHRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoaXJkIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBhbGJlZG8uclxyXG4gICAgICogKyBHOiBhbGJlZG8uZ1xyXG4gICAgICogKyBCOiBhbGJlZG8uYlxyXG4gICAgICogKyBBOiBtZXRhbG5lc3NcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZm91cnRoIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiB2ZWxvY2l0eS5yXHJcbiAgICAgKiArIEc6IHZlbG9jaXR5LmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4NDtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHROb3JtYWxNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0TWV0YWxuZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHREaWZmdXNlTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdCdWZmZXI7IiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzIgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ29uZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC50b3BSYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmJvdHRvbVJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ29uZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZSMgKi8ge1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRvcFJhZGl1czogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjb25lIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG4gICAgICAgIHBvc2l0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRleGNvb3Jkcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGZhY2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gVG9wIGNhcFxyXG4gICAgICAgIHZhciBjYXBTZWdSYWRpYWwgPSBNYXRoLlBJICogMiAvIHRoaXMuY2FwU2VnbWVudHM7XHJcblxyXG4gICAgICAgIHZhciB0b3BDYXAgPSBbXTtcclxuICAgICAgICB2YXIgYm90dG9tQ2FwID0gW107XHJcblxyXG4gICAgICAgIHZhciByMSA9IHRoaXMudG9wUmFkaXVzO1xyXG4gICAgICAgIHZhciByMiA9IHRoaXMuYm90dG9tUmFkaXVzO1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICB2YXIgYzEgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgeSwgMCk7XHJcbiAgICAgICAgdmFyIGMyID0gdmVjMy5mcm9tVmFsdWVzKDAsIC15LCAwKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FwU2VnbWVudHM7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGhldGEgPSBpICogY2FwU2VnUmFkaWFsO1xyXG4gICAgICAgICAgICB2YXIgeCA9IHIxICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeiA9IHIxICogTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgICAgICB0b3BDYXAucHVzaCh2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeikpO1xyXG5cclxuICAgICAgICAgICAgeCA9IHIyICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB6ID0gcjIgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIGJvdHRvbUNhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCAteSwgeikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgdG9wIGNhcFxyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMxKTtcclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcygwLCAxKSk7XHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNhcFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHRvcENhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFswLCBpKzEsIChpKzEpICUgbiArIDFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGJvdHRvbSBjYXBcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChjMik7XHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaChib3R0b21DYXBbaV0pO1xyXG4gICAgICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcclxuICAgICAgICAgICAgZmFjZXMucHVzaChbb2Zmc2V0LCBvZmZzZXQrKChpKzEpICUgbiArIDEpLCBvZmZzZXQraSsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCBzaWRlXHJcbiAgICAgICAgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICB2YXIgbjIgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjIrMTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyBuMjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHZlYzMubGVycCh2ZWMzLmNyZWF0ZSgpLCB0b3BDYXBbaV0sIGJvdHRvbUNhcFtpXSwgdikpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCB2KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgajtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9ICgoaSArIDEpICUgbikgKiAobjIgKyAxKSArIGogKyAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTIsIG9mZnNldCtpMSwgb2Zmc2V0K2k0XSk7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTQsIG9mZnNldCtpMywgb2Zmc2V0K2kyXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkocG9zaXRpb25zKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciByID0gTWF0aC5tYXgodGhpcy50b3BSYWRpdXMsIHRoaXMuYm90dG9tUmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXIsIC10aGlzLmhlaWdodC8yLCAtcik7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHIsIHRoaXMuaGVpZ2h0LzIsIHIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lR2VvbWV0cnkgZnJvbSAnLi9Db25lJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DeWxpbmRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5yYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuY2FwU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKi9cclxudmFyIEN5bGluZGVyID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXBTZWdtZW50czogNTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMVxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuYnVpbGQoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN5bGluZGVyIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY29uZSA9IG5ldyBDb25lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICB0b3BSYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBib3R0b21SYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBjYXBTZWdtZW50czogdGhpcy5jYXBTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHRoaXMuaGVpZ2h0U2VnbWVudHMsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gY29uZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IGNvbmUuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IGNvbmUuYm91bmRpbmdCb3g7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3lsaW5kZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gdl9Qb3NpdGlvbiA9IHBvc2l0aW9uO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwb3RfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IHVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBwZW51bWJyYUFuZ2xlQ29zaW5lO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGZhbGxvZmZGYWN0b3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0U2hhZG93TWFwU2l6ZTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBmbG9hdCBjID0gZG90KC1ub3JtYWxpemUobGlnaHREaXJlY3Rpb24pLCBMKTtcXG4gZmxvYXQgZmFsbG9mZiA9IGNsYW1wKChjIC0gdW1icmFBbmdsZUNvc2luZSkgLyAocGVudW1icmFBbmdsZUNvc2luZSAtIHVtYnJhQW5nbGVDb3NpbmUpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoMS4wIC0gZmFsbG9mZikgKiBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGxpZ2h0U2hhZG93TWFwLCBsaWdodE1hdHJpeCwgcG9zaXRpb24sIGxpZ2h0U2hhZG93TWFwU2l6ZVxcbiApO1xcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHREaXJlY3Rpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4geiA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiB6IDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplLFxcbiB2ZWMyKDEuMCAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMS4wKSxcXG4gdmVjMihmbG9hdChfaWR4XykgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDAuMClcXG4gKTtcXG4gfVxcbiB9fVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gdmVjMyBhbGJlZG8gPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUzLCB1dikucmdiO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGFsYmVkbztcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9zaF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29lZmZpY2llbnRzWzldO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52ZWMzIGNhbGNBbWJpZW50U0hMaWdodCh2ZWMzIE4pIHtcXG4gcmV0dXJuIGxpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgbGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgbGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIE4gPSB0ZXhlbDEucmdiICogMi4wIC0gMS4wO1xcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvICogY2FsY0FtYmllbnRTSExpZ2h0KE4pO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRDdWJlbWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnbG9zc2luZXNzLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMgPSByb3VnaCAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0ID0gc3BlY3VsYXJDb2xvciAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuIHZlYzMgZW52VGV4ZWwgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlTG9kRVhUKGxpZ2h0Q3ViZW1hcCwgTCwgYmlhcyksIDguMTIpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGVudlRleGVsICogZW52V2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5wb2ludF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKFxcbiBsaWdodFNoYWRvd01hcCwgLUwgKiBkaXN0LCBsaWdodFJhbmdlXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gY2xhbXAoc2hhZG93Q29udHJpYiwgMC4wLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5zcGhlcmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFkaXVzO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gdmVjMyBSID0gcmVmbGVjdChWLCBOKTtcXG4gZmxvYXQgdG1wID0gZG90KEwsIFIpO1xcbiB2ZWMzIGNUb1IgPSB0bXAgKiBSIC0gTDtcXG4gZmxvYXQgZCA9IGxlbmd0aChjVG9SKTtcXG4gTCA9IEwgKyBjVG9SICogY2xhbXAobGlnaHRSYWRpdXMgLyBkLCAwLjAsIDEuMCk7XFxuIEwgPSBub3JtYWxpemUoTCk7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbjtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSBsaWdodFJhZGl1cyAvIDIuMCAvIGRpc3QsIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnR1YmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgbGlnaHRFeHRlbmQ7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiB2ZWMzIEwwID0gbGlnaHRQb3NpdGlvbiAtIGxpZ2h0RXh0ZW5kIC0gcG9zaXRpb247XFxuIHZlYzMgTDEgPSBsaWdodFBvc2l0aW9uICsgbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMRCA9IEwxIC0gTDA7XFxuIGZsb2F0IGxlbjAgPSBsZW5ndGgoTDApO1xcbiBmbG9hdCBsZW4xID0gbGVuZ3RoKEwxKTtcXG4gZmxvYXQgaXJyYSA9IDIuMCAqIGNsYW1wKGRvdChOLCBMMCkgLyAoMi4wICogbGVuMCkgKyBkb3QoTiwgTDEpIC8gKDIuMCAqIGxlbjEpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IExERG90UiA9IGRvdChSLCBMRCk7XFxuIGZsb2F0IHQgPSAoTEREb3RSICogZG90KFIsIEwwKSAtIGRvdChMMCwgTEQpKSAvIChkb3QoTEQsIExEKSAtIExERG90UiAqIExERG90Uik7XFxuIHQgPSBjbGFtcCh0LCAwLjAsIDEuMCk7XFxuIEwgPSBMMCArIHQgKiBMRDtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gMC4wIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGlycmEgKiBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpXFxuICogKGRpZmZ1c2VDb2xvciArIERfUGhvbmcoZ2xvc3NpbmVzcywgbmRoKSAqIEZfU2NobGljayhuZHYsIHNwZWN1bGFyQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gTGlnaHQtcHJlIHBhc3MgZGVmZXJyZWQgcmVuZGVyaW5nXHJcbi8vIGh0dHA6Ly93d3cucmVhbHRpbWVyZW5kZXJpbmcuY29tL2Jsb2cvZGVmZXJyZWQtbGlnaHRpbmctYXBwcm9hY2hlcy9cclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgRnVsbFF1YWRQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBDb25lR2VvIGZyb20gJy4uL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXJHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ3lsaW5kZXInO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0J1ZmZlciBmcm9tICcuL0dCdWZmZXInO1xyXG5cclxuaW1wb3J0IHByZXpHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvdXRpbC5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWdodHZvbHVtZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzJztcclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5pbXBvcnQgc3BvdEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcG90Lmdsc2wuanMnO1xyXG5pbXBvcnQgZGlyZWN0aW9uYWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50c2hHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudHNoLmdsc2wuanMnO1xyXG5pbXBvcnQgYW1iaWVudGN1YmVtYXBHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyc7XHJcbmltcG9ydCBwb2ludEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9wb2ludC5nbHNsLmpzJztcclxuaW1wb3J0IHNwaGVyZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCB0dWJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KHByZXpHbHNsKTtcclxuU2hhZGVyLmltcG9ydCh1dGlsR2xzbCk7XHJcblNoYWRlci5pbXBvcnQobGlnaHR2b2x1bWVHbHNsKTtcclxuXHJcbi8vIExpZ2h0IHNoYWRlcnNcclxuU2hhZGVyLmltcG9ydChzcG90R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoZGlyZWN0aW9uYWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudHNoR2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudGN1YmVtYXBHbHNsKTtcclxuU2hhZGVyLmltcG9ydChwb2ludEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHNwaGVyZUdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHR1YmVHbHNsKTtcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5cclxuLyoqXHJcbiAqIERlZmVycmVkIHJlbmRlcmVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5SZW5kZXJlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIERlZmVycmVkUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGZ1bGxRdWFkVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpO1xyXG4gICAgdmFyIGxpZ2h0Vm9sdW1lVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5saWdodF92b2x1bWUudmVydGV4Jyk7XHJcblxyXG4gICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIgPSBuZXcgU2hhZGVyKGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0JykpO1xyXG5cclxuICAgIHZhciBsaWdodEFjY3VtdWxhdGVCbGVuZEZ1bmMgPSBmdW5jdGlvbiAoZ2wpIHtcclxuICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKGdsLkZVTkNfQUREKTtcclxuICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5PTkUsIGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlTGlnaHRQYXNzTWF0ID0gZnVuY3Rpb24gKHNoYWRlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHNoYWRlcixcclxuICAgICAgICAgICAgYmxlbmQ6IGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNyZWF0ZVZvbHVtZVNoYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaGFkZXIobGlnaHRWb2x1bWVWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuJyArIG5hbWUpKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gUm90YXRlIGFuZCBwb3NpdGlvbmluZyB0byBmaXQgdGhlIHNwb3QgbGlnaHRcclxuICAgIC8vIFdoaWNoIHRoZSBjdXNwIG9mIGNvbmUgcG9pbnRpbmcgdG8gdGhlIHBvc2l0aXZlIHpcclxuICAgIC8vIGFuZCBwb3NpdGlvbmVkIG9uIHRoZSBvcmlnaW5cclxuICAgIHZhciBjb25lR2VvID0gbmV3IENvbmVHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIG1hdC5yb3RhdGVYKE1hdGguUEkgLyAyKVxyXG4gICAgICAgIC50cmFuc2xhdGUobmV3IFZlY3RvcjMoMCwgLTEsIDApKTtcclxuXHJcbiAgICBjb25lR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XHJcblxyXG4gICAgdmFyIGN5bGluZGVyR2VvID0gbmV3IEN5bGluZGVyR2VvKHtcclxuICAgICAgICBjYXBTZWdtZW50czogMTBcclxuICAgIH0pO1xyXG4gICAgLy8gQWxpZ24gd2l0aCB4IGF4aXNcclxuICAgIG1hdC5pZGVudGl0eSgpLnJvdGF0ZVooTWF0aC5QSSAvIDIpO1xyXG4gICAgY3lsaW5kZXJHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByb3ZpZGUgU2hhZG93TWFwUGFzcyBmb3Igc2hhZG93IHJlbmRlcmluZy5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhdXRvIHJlc2l6aW5nIGZyb20gZ2l2ZW4gZGVmdWFsdCByZW5kZXJlciBzaXplLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9SZXNpemU6IHRydWUsXHJcblxyXG4gICAgICAgIF9jcmVhdGVMaWdodFBhc3NNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdCxcclxuXHJcbiAgICAgICAgX2dCdWZmZXI6IG5ldyBHQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtRnJhbWVCdWZmZXI6IG5ldyBGcmFtZUJ1ZmZlcigpLFxyXG5cclxuICAgICAgICBfbGlnaHRBY2N1bVRleDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIERldmljZSBub3Qgc3VwcG9ydCBmbG9hdCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNUXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mdWxsUXVhZFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBibGVuZFdpdGhQcmV2aW91czogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICBfZGlyZWN0aW9uYWxMaWdodE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIpLFxyXG5cclxuICAgICAgICBfYW1iaWVudE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50U0hNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0JylcclxuICAgICAgICApKSxcclxuICAgICAgICBfYW1iaWVudEN1YmVtYXBNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG5cclxuICAgICAgICBfc3BvdExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3Nwb3RfbGlnaHQnKSxcclxuICAgICAgICBfcG9pbnRMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdwb2ludF9saWdodCcpLFxyXG5cclxuICAgICAgICBfc3BoZXJlTGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BoZXJlX2xpZ2h0JyksXHJcbiAgICAgICAgX3R1YmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCd0dWJlX2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9saWdodFNwaGVyZUdlbzogbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDEwLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdlbWVudHM6IDEwXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9saWdodENvbmVHZW86IGNvbmVHZW8sXHJcblxyXG4gICAgICAgIF9saWdodEN5bGluZGVyR2VvOiBjeWxpbmRlckdlbyxcclxuXHJcbiAgICAgICAgX291dHB1dFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLm91dHB1dCcpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5SZW5kZXJlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEbyByZW5kZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5yZW5kZXJUb1RhcmdldCA9IGZhbHNlXSBJZiBub3Qgb3VwdXQgYW5kIHJlbmRlciB0byB0aGUgdGFyZ2V0IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMubm90VXBkYXRlU2hhZG93ID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2hhZG93LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTY2VuZSA9IHRydWVdIElmIG5vdCB1cGRhdGUgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgb3B0cykge1xyXG5cclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgICAgICBvcHRzLnJlbmRlclRvVGFyZ2V0ID0gb3B0cy5yZW5kZXJUb1RhcmdldCB8fCBmYWxzZTtcclxuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNoYWRvdyA9IG9wdHMubm90VXBkYXRlU2hhZG93IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2NlbmUgPSBvcHRzLm5vdFVwZGF0ZVNjZW5lIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMubm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUudXBkYXRlTGlnaHRzKCk7XHJcbiAgICAgICAgLy8gUmVuZGVyIGxpc3Qgd2lsbCBiZSB1cGRhdGVkIGluIGdidWZmZXIuXHJcblxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgRm9yIHN0ZXJlbyByZW5kZXJpbmdcclxuICAgICAgICB2YXIgZHByID0gcmVuZGVyZXIuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9SZXNpemVcclxuICAgICAgICAgICAgJiYgKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGhcclxuICAgICAgICAgICAgfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci5nZXRXaWR0aCgpICogZHByLCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnVwZGF0ZShyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIC8vIEFjY3VtdWxhdGUgbGlnaHQgYnVmZmVyXHJcbiAgICAgICAgdGhpcy5fYWNjdW11bGF0ZUxpZ2h0QnVmZmVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCAhb3B0cy5ub3RVcGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMucmVuZGVyVG9UYXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGhpcy5fbGlnaHRBY2N1bVRleCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2dCdWZmZXIucmVuZGVyRGVidWcocmVuZGVyZXIsIGNhbWVyYSwgJ25vcm1hbCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuRnJhbWVCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmRlZmVycmVkLkdCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEdCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdGhpcy5fZ0J1ZmZlci5nZXRWaWV3cG9ydCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBnZXRGdWxsUXVhZExpZ2h0UGFzczogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAvLyB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCA/XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hY2N1bXVsYXRlTGlnaHRCdWZmZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1UZXggPSB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgICAgIHZhciBsaWdodEFjY3VtRnJhbWVCdWZmZXIgPSB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXI7XHJcblxyXG4gICAgICAgIHZhciBleWVQb3NpdGlvbiA9IGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB2b2x1bWUgbWVzaGVzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS5saWdodHNbaV0uaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVMaWdodFByb3h5KHNjZW5lLmxpZ2h0c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dNYXBQYXNzID0gdGhpcy5zaGFkb3dNYXBQYXNzO1xyXG4gICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIHVwZGF0ZVNoYWRvdykge1xyXG4gICAgICAgICAgICBnbC5jbGVhckNvbG9yKDEsIDEsIDEsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlTGlnaHRTaGFkb3cocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmF0dGFjaChsaWdodEFjY3VtVGV4KTtcclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSByZW5kZXJlci5jbGVhckNvbG9yO1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBsaWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHZhciBkcHIgPSB2aWV3cG9ydC5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIGdsLnNjaXNzb3Iodmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwciwgdmlld3BvcnQud2lkdGggKiBkcHIsIHZpZXdwb3J0LmhlaWdodCAqIGRwcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzdGFydGxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2hMaXN0ID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB1VHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlcztcclxuXHJcbiAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gbGlnaHQudm9sdW1lTWVzaCB8fCBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcblxyXG4gICAgICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gdm9sdW1lTWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIHdpbGwgYWZmZWN0IHRoZSBzY2VuZSBib3VuZGluZyBib3ggd2hlbiByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgIC8vIGlmIGNhc3RTaGFkb3cgaXMgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwucG9pbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnBvaW50TGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5wb2ludExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwb3RMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnNwb3RMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwb3RMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RGlyZWN0aW9uJywgdVRwbC5zcG90TGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgndW1icmFBbmdsZUNvc2luZScsIHVUcGwuc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdwZW51bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2ZhbGxvZmZGYWN0b3InLCB1VHBsLnNwb3RMaWdodEZhbGxvZmZGYWN0b3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BoZXJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC5zcGhlcmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFkaXVzJywgdVRwbC5zcGhlcmVMaWdodFJhZGl1cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5zcGhlcmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RVQkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC50dWJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC50dWJlTGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodEV4dGVuZCcsIHVUcGwudHViZUxpZ2h0RXh0ZW5kLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnR1YmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25MaWdodFR5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUzJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoTGlzdC5wdXNoKHZvbHVtZU1lc2gpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXNzID0gdGhpcy5fZnVsbFF1YWRQYXNzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIEZ1bGwgcXVhZCBsaWdodFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FNQklFTlRfU0hfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudFNITWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvZWZmaWNpZW50cycsIHVUcGwuYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHMudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9DVUJFTUFQX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRDdWJlbWFwTWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q3ViZW1hcCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXAudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdicmRmTG9va3VwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSBzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9kaXJlY3Rpb25hbExpZ2h0TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdTSEFET1dfQ0FTQ0FERScsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rb253IGxpZ2h0IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodW5rbm93bkxpZ2h0VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXNzTWF0ZXJpYWwgPSBwYXNzLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2V5ZVBvc2l0aW9uJywgZXllUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMigpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBsaWdodC5fX3NoYWRvd01hcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cmljZXMnLCBsaWdodC5fX2xpZ2h0TWF0cmljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNOZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2hhZG93Q2FzY2FkZUNsaXBzRmFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGFzcy5yZW5kZXJRdWFkKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyVm9sdW1lTWVzaExpc3QocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVybGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3ByZXBhcmVMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgd29ybGRWaWV3ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHQuY2FzdFNoYWRvdyB8fCBsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUuaXNGcnVzdHVtQ3VsbGVkKHZvbHVtZU1lc2gsIGNhbWVyYSwgd29ybGRWaWV3LmFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgdm9sdW1lTWVzaC5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbWF0ZXJpYWwpIHtcclxuICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJQb2ludExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIHNoYWRvd01hcHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodE1hdHJpeCcsIGxpZ2h0TWF0cmljZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRElSRUNUSU9OQUxfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBsaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgbGlnaHQsIGNhc2NhZGVDbGlwcywgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzRmFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBsaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHNOZWFyO1xyXG4gICAgICAgICAgICAgICAgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHNGYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX3NoYWRvd01hcCA9IHNoYWRvd01hcHNbMF07XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2xpZ2h0TWF0cmljZXMgPSBsaWdodE1hdHJpY2VzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBVcGRhdGUgbGlnaHQgdm9sdW1lIG1lc2hcclxuICAgIC8vIExpZ2h0IHZvbHVtZSBtZXNoIGlzIHJlbmRlcmVkIGluIGxpZ2h0IGFjY3VtdWxhdGUgcGFzcyBpbnN0ZWFkIG9mIGZ1bGwgcXVhZC5cclxuICAgIC8vIEl0IHdpbGwgcmVkdWNlIHBpeGVscyBzaWduaWZpY2FudGx5IHdoZW4gbG9jYWwgbGlnaHQgaXMgcmVsYXRpdmVseSBzbWFsbC5cclxuICAgIC8vIEFuZCB3ZSBjYW4gdXNlIGN1c3RvbSB2b2x1bWUgbWVzaCB0byBzaGFwZSB0aGUgbGlnaHQuXHJcbiAgICAvL1xyXG4gICAgLy8gU2VlIFwiRGVmZXJyZWQgU2hhZGluZyBPcHRpbWl6YXRpb25zXCIgaW4gR0RDMjAxMVxyXG4gICAgX3VwZGF0ZUxpZ2h0UHJveHk6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciB2b2x1bWVNZXNoO1xyXG4gICAgICAgIGlmIChsaWdodC52b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGxvY2FsIGxpZ2h0IChwb2ludCBhbmQgc3BvdCkgbmVlZHMgdm9sdW1lIG1lc2guXHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb25hbCBhbmQgYW1iaWVudCBsaWdodCByZW5kZXJzIGluIGZ1bGwgcXVhZFxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gbGlnaHQudHlwZSA9PT0gJ1NQSEVSRV9MSUdIVCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zcGhlcmVMaWdodFNoYWRlciA6IHRoaXMuX3BvaW50TGlnaHRTaGFkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggY3JlYXRlZCBhdXRvbWF0aWNhbGx5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaWdodC5fX3ZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdChzaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0U3BoZXJlR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBsaWdodCB2b2x1bWUgbWVzaCBpbnRlcnNlY3QgY2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgbWVzaCBpbnNpZGUgY2FuIHN0aWxsIGJlIHJlbmRlcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGxpZ2h0LnJhbmdlICsgKGxpZ2h0LnJhZGl1cyB8fCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChyLCByLCByKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0Ll9fdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaCB8fCBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQodGhpcy5fc3BvdExpZ2h0U2hhZGVyKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0Q29uZUdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhc3BlY3QgPSBNYXRoLnRhbihsaWdodC5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQoYXNwZWN0ICogcmFuZ2UsIGFzcGVjdCAqIHJhbmdlLCByYW5nZSAvIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl90dWJlTGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDeWxpbmRlckdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KGxpZ2h0Lmxlbmd0aCAvIDIgKyByYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAvLyBBcHBseSBsaWdodCB0cmFuc2Zvcm1cclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtLCBsaWdodC53b3JsZFRyYW5zZm9ybSwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSB0aGlzLnNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbFtoYXNTaGFkb3cgPyAnZGVmaW5lJyA6ICd1bmRlZmluZSddKCdmcmFnbWVudCcsICdTSEFET1dNQVBfRU5BQkxFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclZvbHVtZU1lc2hMaXN0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBwcmVaTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBmdW5jdGlvbiBnZXRQcmVaTWF0ZXJpYWwoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVaTWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFUVVBTCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZvbHVtZU1lc2hMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IHZvbHVtZU1lc2hMaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh3b3JsZFZpZXcsIGNhbWVyYS52aWV3TWF0cml4LCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXNlIHByZXogdG8gYXZvaWQgb25lIHBpeGVsIHJlbmRlcmVkIHR3aWNlXHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2xlYXIgREVQVEhfQlVGRkVSXHJcbiAgICAgICAgICAgICAgICBnbC5jbGVhcihnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGdldFByZVpNYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVuZGVyIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbC5kZXB0aE1hc2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdm9sdW1lTWVzaF0sIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVNTKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodENvbmVHZW8uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRDeWxpbmRlckdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodFNwaGVyZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnVsbFF1YWRQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX291dHB1dFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEZWZlcnJlZFJlbmRlcmVyO1xyXG4iLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MiBNYXRyaXhcclxuICogQG5hbWUgbWF0MlxyXG4gKi9cclxuXHJcbnZhciBtYXQyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xyXG5tYXQyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MiB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGExID0gYVsxXTtcclxuICAgICAgICBvdXRbMV0gPSBhWzJdO1xyXG4gICAgICAgIG91dFsyXSA9IGExO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYVsxXTtcclxuICAgICAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYTAgKiBhMyAtIGEyICogYTE7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAgYTMgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAtYTEgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAtYTIgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAgYTAgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gQ2FjaGluZyB0aGlzIHZhbHVlIGlzIG5lc3NlY2FyeSBpZiBvdXQgPT0gYVxyXG4gICAgdmFyIGEwID0gYVswXTtcclxuICAgIG91dFswXSA9ICBhWzNdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIG91dFszXSA9ICBhMDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0Mi5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM107XHJcbiAgICB2YXIgYjAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0Mi5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyLm11bCA9IG1hdDIubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDIgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MiBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKiovXHJcbm1hdDIuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDIuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpKSlcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEwsIEQgYW5kIFUgbWF0cmljZXMgKExvd2VyIHRyaWFuZ3VsYXIsIERpYWdvbmFsIGFuZCBVcHBlciB0cmlhbmd1bGFyKSBieSBmYWN0b3JpemluZyB0aGUgaW5wdXQgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBEIHRoZSBkaWFnb25hbCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBVIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcclxuICovXHJcblxyXG5tYXQyLkxEVSA9IGZ1bmN0aW9uIChMLCBELCBVLCBhKSB7XHJcbiAgICBMWzJdID0gYVsyXS9hWzBdO1xyXG4gICAgVVswXSA9IGFbMF07XHJcbiAgICBVWzFdID0gYVsxXTtcclxuICAgIFVbM10gPSBhWzNdIC0gTFsyXSAqIFVbMV07XHJcbiAgICByZXR1cm4gW0wsIEQsIFVdO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDI7IiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MyBNYXRyaXhcclxuICogQG5hbWUgbWF0MmRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgbWF0MmQgY29udGFpbnMgc2l4IGVsZW1lbnRzIGRlZmluZWQgYXM6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5XVxyXG4gKiA8L3ByZT5cclxuICogVGhpcyBpcyBhIHNob3J0IGZvcm0gZm9yIHRoZSAzeDMgbWF0cml4OlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYywgdHgsXHJcbiAqICBiLCBkLCB0eSxcclxuICogIDAsIDAsIDFdXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGUgbGFzdCByb3cgaXMgaWdub3JlZCBzbyB0aGUgYXJyYXkgaXMgc2hvcnRlciBhbmQgb3BlcmF0aW9ucyBhcmUgZmFzdGVyLlxyXG4gKi9cclxuXHJcbnZhciBtYXQyZCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MmRcclxuICpcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xyXG5tYXQyZC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg2KTtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyZCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNsb25lID0gZnVuY3Rpb24oYSkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MmQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhYSA9IGFbMF0sIGFiID0gYVsxXSwgYWMgPSBhWzJdLCBhZCA9IGFbM10sXHJcbiAgICAgICAgYXR4ID0gYVs0XSwgYXR5ID0gYVs1XTtcclxuXHJcbiAgICB2YXIgZGV0ID0gYWEgKiBhZCAtIGFiICogYWM7XHJcbiAgICBpZighZGV0KXtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSBhZCAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hYiAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hYyAqIGRldDtcclxuICAgIG91dFszXSA9IGFhICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGFiICogYXR4IC0gYWEgKiBhdHkpICogZGV0O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0MmQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM10sIGI0ID0gYls0XSwgYjUgPSBiWzVdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xyXG4gICAgb3V0WzVdID0gYTEgKiBiNCArIGEzICogYjUgKyBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyZC5tdWwgPSBtYXQyZC5tdWx0aXBseTtcclxuXHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDJkIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICBvdXRbNF0gPSBhNDtcclxuICAgIG91dFs1XSA9IGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHYwID0gdlswXSwgdjEgPSB2WzFdO1xyXG4gICAgb3V0WzBdID0gYTAgKiB2MDtcclxuICAgIG91dFsxXSA9IGExICogdjA7XHJcbiAgICBvdXRbMl0gPSBhMiAqIHYxO1xyXG4gICAgb3V0WzNdID0gYTMgKiB2MTtcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byB0cmFuc2xhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXHJcbm1hdDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMDtcclxuICAgIG91dFsxXSA9IGExO1xyXG4gICAgb3V0WzJdID0gYTI7XHJcbiAgICBvdXRbM10gPSBhMztcclxuICAgIG91dFs0XSA9IGEwICogdjAgKyBhMiAqIHYxICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0MmQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIDEpKVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDJkOyIsIi8qKlxyXG4gKiBAZmlsZW92ZXJ2aWV3IGdsLW1hdHJpeCAtIEhpZ2ggcGVyZm9ybWFuY2UgbWF0cml4IGFuZCB2ZWN0b3Igb3BlcmF0aW9uc1xyXG4gKiBAYXV0aG9yIEJyYW5kb24gSm9uZXNcclxuICogQGF1dGhvciBDb2xpbiBNYWNLZW56aWUgSVZcclxuICogQHZlcnNpb24gMi4yLjJcclxuICovXHJcblxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgdmVjMiBmcm9tICcuL3ZlYzInO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuL3ZlYzQnO1xyXG5pbXBvcnQgbWF0MiBmcm9tICcuL21hdDInO1xyXG5pbXBvcnQgbWF0MmQgZnJvbSAnLi9tYXQyZCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4vcXVhdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICB2ZWMyOiB2ZWMyLFxyXG4gICAgdmVjMzogdmVjMyxcclxuICAgIHZlYzQ6IHZlYzQsXHJcbiAgICBtYXQyOiBtYXQyLFxyXG4gICAgbWF0MmQ6IG1hdDJkLFxyXG4gICAgbWF0MzogbWF0MyxcclxuICAgIG1hdDQ6IG1hdDQsXHJcbiAgICBxdWF0OiBxdWF0XHJcbn07XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IGdsbWF0cml4IGZyb20gJy4uL2dsbWF0cml4JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdsbWF0cml4O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBTcGhlcmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlNwaGVyZSMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFkaXVzOiA1XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BIRVJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BoZXJlTGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFkaXVzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhZGl1cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuVHViZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBUdWJlTGlnaHQgPSBMaWdodC5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5saWdodC5UdWJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IDEwXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnVFVCRV9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHR1YmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodEV4dGVuZDoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIGluIHggYXhpc1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgpLnNjYWxlKGluc3RhbmNlLmxlbmd0aCAvIDIpLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSkoKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFR1YmVMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5GWFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZYTG9hZGVyID0gQmFzZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHNoYWRlclJvb3RQYXRoOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuRlgucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB1cmxcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24ocGVyY2VudCwgbG9hZGVkLCB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdwcm9ncmVzcycsIHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3NpdG9yKEpTT04ucGFyc2UoZGF0YSksIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUm9vdFBhdGg6IHRoaXMudGV4dHVyZVJvb3RQYXRoIHx8IHRoaXMucm9vdFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhOiB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZTogdGhpcy5zY2VuZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGWExvYWRlcjtcclxuIiwiaW1wb3J0IG1hdDIgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Mic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDJcclxuICovXHJcbnZhciBNYXRyaXgyID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDIuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4Mi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQyLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQyLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge01hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0Mi5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsdGlwbHkgPSBNYXRyaXgyLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0Mi5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcclxuIiwiaW1wb3J0IG1hdDJkIGZyb20gJy4uL2dsbWF0cml4L21hdDJkJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MmRcclxuICovXHJcbnZhciBNYXRyaXgyZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJkXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDJkI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0MmQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDJkLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MmQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDJkKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDJkLmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsdGlwbHkodGhpcy5hcnJheSwgYi5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDJkLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgbWF0MmQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDJkLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyZC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyZC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0MmQubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bHRpcGx5ID0gTWF0cml4MmQubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyZC5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0MmQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyZDtcclxuIiwiaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDNcclxuICovXHJcbnZhciBNYXRyaXgzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXgzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MygpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBNYXRyaXgyZCBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQyZDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLmZyb21NYXQyZCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgb2YgTWF0cml4NFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIG1hdDMuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIG1hdDMucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgc2VsZiBieSB2XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gYVxyXG4gICAgICovXHJcbiAgICBub3JtYWxGcm9tTWF0NDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc3Bvc2Ugc2VsZiwgaW4tcGxhY2UuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuYWRqb2ludCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuTWF0cml4My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgbWF0My5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQzLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubXVsdGlwbHkgPSBNYXRyaXgzLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmZyb21NYXQyZCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDJkKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbVF1YXQgPSBmdW5jdGlvbiAob3V0LCBxKSB7XHJcbiAgICBtYXQzLmZyb21RdWF0KG91dC5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubm9ybWFsRnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0My5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5zY2FsZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc3Bvc2UgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQzLnRyYW5zbGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBSYW5kb20gb3IgY29uc3RhbnQgMWQsIDJkLCAzZCB2ZWN0b3IgZ2VuZXJhdG9yXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WYWx1ZVxyXG4gKi9cclxudmFyIFZhbHVlID0gZnVuY3Rpb24oKSB7fTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gW291dF1cclxuICogQHJldHVybiB7bnVtYmVyfGNsYXkuVmVjdG9yMnxjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7fTtcclxuXHJcbi8vIENvbnN0YW50XHJcbnZhciBDb25zdGFudFZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9O1xyXG59O1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0YW50VmFsdWU7XHJcblxyXG4vLyBWZWN0b3JcclxudmFyIFZlY3RvclZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB2YWwuY29uc3RydWN0b3I7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBDb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXQuY29weSh2YWwpO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuVmVjdG9yVmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVjdG9yVmFsdWU7XHJcbi8vUmFuZG9tIDFEXHJcbnZhciBSYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2UgPSBtYXggLSBtaW47XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2UgKyBtaW47XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20xRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMUQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMUQ7XHJcblxyXG4vLyBSYW5kb20yRFxyXG52YXIgUmFuZG9tMkQgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjIuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tMkQucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTJELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTJEO1xyXG5cclxudmFyIFJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZVggPSBtYXgueCAtIG1pbi54O1xyXG4gICAgdmFyIHJhbmdlWSA9IG1heC55IC0gbWluLnk7XHJcbiAgICB2YXIgcmFuZ2VaID0gbWF4LnogLSBtaW4uejtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjMuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV0sXHJcbiAgICAgICAgICAgIHJhbmdlWiAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMl1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tM0QucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTNELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTNEO1xyXG5cclxuLy8gRmFjdG9yeSBtZXRob2RzXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gY29uc3RhbnRcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLmNvbnN0YW50ID0gZnVuY3Rpb24oY29uc3RhbnQpIHtcclxuICAgIHJldHVybiBuZXcgQ29uc3RhbnRWYWx1ZShjb25zdGFudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gdmVjdG9yXHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS52ZWN0b3IgPSBmdW5jdGlvbih2ZWN0b3IpIHtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yVmFsdWUodmVjdG9yKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWluXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTFEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTJEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20zRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTNEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZhbHVlO1xyXG4iLCJpbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yNFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFZlY3RvcjQgPSBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yNCwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWM0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yNC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3I0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbihhLCBiLCB0KSB7XHJcbiAgICAgICAgdmVjNC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaW5pbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtaW46IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHJhbmRvbSB4LCB5LCB6LCB3IGNvbXBvbmVudHMgd2l0aCBhIGdpdmVuIHNjYWxlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHJhbmRvbTogZnVuY3Rpb24oc2NhbGUpIHtcclxuICAgICAgICB2ZWM0LnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBiIGFuZCBhZGQgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZUFuZEFkZDogZnVuY3Rpb24oYiwgcykge1xyXG4gICAgICAgIHZlYzQuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWREaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5zdWIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN1YnRyYWN0IGIgZnJvbSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIFF1YXRlcm5pb24gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybVF1YXQ6IGZ1bmN0aW9uKHEpIHtcclxuICAgICAgICB2ZWM0LnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yNC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0LmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XHJcbiAgICB2ZWM0LnNldChvdXQuYXJyYXksIHgsIHksIHosIHcpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuY29weSA9IGZ1bmN0aW9uKG91dCwgYikge1xyXG4gICAgdmVjNC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3RhbmNlID0gVmVjdG9yNC5kaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXYgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuZGl2aWRlKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXZpZGUgPSBWZWN0b3I0LmRpdjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZG90ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmxlbiA9IGZ1bmN0aW9uKGIpIHtcclxuICAgIHJldHVybiB2ZWM0Lmxlbmd0aChiLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFZlY3RvcjQubGVuZ3RoID0gVmVjdG9yNC5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubGVycCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgdCkge1xyXG4gICAgdmVjNC5sZXJwKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bHRpcGx5ID0gVmVjdG9yNC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjNC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnJhbmRvbSA9IGZ1bmN0aW9uKG91dCwgc2NhbGUpIHtcclxuICAgIHZlYzQucmFuZG9tKG91dC5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjNC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJEaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuc3FyRGlzdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjQuc3FyRGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjQuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc3VidHJhY3QgPSBWZWN0b3I0LnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzQudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yNDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlXHJcbiAqL1xyXG52YXIgUGFydGljbGUgPSBmdW5jdGlvbigpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgZXVsZXIgYW5nbGUgdG8gcmVwcmVzZW50IHBhcnRpY2xlIHJvdGF0aW9uXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmxpZmUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5hZ2UgPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zcHJpdGVTaXplID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMud2VpZ2h0ID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZW1pdHRlciA9IG51bGw7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHBhcnRpY2xlIHBvc2l0aW9uXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAqL1xyXG5QYXJ0aWNsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy52ZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5hbmd1bGFyVmVsb2NpdHkuYXJyYXksIGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJ0aWNsZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vUGFydGljbGUnO1xyXG5pbXBvcnQgVmFsdWUgZnJvbSAnLi4vbWF0aC9WYWx1ZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRW1pdHRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEVtaXR0ZXIgPSBCYXNlLmV4dGVuZCggLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIGNyZWF0ZWQgYnkgdGhpcyBlbWl0dGVyXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYXg6IDEwMDAsXHJcbiAgICAvKipcclxuICAgICAqIE51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXIgZWFjaCBzaG90XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbW91bnQ6IDIwLFxyXG5cclxuICAgIC8vIEluaXQgc3RhdHVzIGZvciBlYWNoIHBhcnRpY2xlXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGxpZmUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGxpZmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHBvc2l0aW9uIGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcm90YXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgdmVsb2NpdHk6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGFuZ3VsYXIgdmVsb2NpdHkgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgc3ByaXRlIHNpemUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZVNpemU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHdlaWdodCBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgd2VpZ2h0OiBudWxsLFxyXG5cclxuICAgIF9wYXJ0aWNsZVBvb2w6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlUG9vbCA9IFtdO1xyXG5cclxuICAgIC8vIFRPRE8gUmVkdWNlIGhlYXAgbWVtb3J5XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4OyBpKyspIHtcclxuICAgICAgICB2YXIgcGFydGljbGUgPSBuZXcgUGFydGljbGUoKTtcclxuICAgICAgICBwYXJ0aWNsZS5lbWl0dGVyID0gdGhpcztcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0dGVyIG51bWJlciBvZiBwYXJ0aWNsZXMgYW5kIHB1c2ggdGhlbSB0byBhIGdpdmVuIHBhcnRpY2xlIGxpc3QuIEVtbWl0IG51bWJlciBpcyBkZWZpbmVkIGJ5IGFtb3VudCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPGNsYXkucGFydGljbGUuUGFydGljbGU+fSBvdXRcclxuICAgICAqL1xyXG4gICAgZW1pdDogZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgdmFyIGFtb3VudCA9IE1hdGgubWluKHRoaXMuX3BhcnRpY2xlUG9vbC5sZW5ndGgsIHRoaXMuYW1vdW50KTtcclxuXHJcbiAgICAgICAgdmFyIHBhcnRpY2xlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcclxuICAgICAgICAgICAgcGFydGljbGUgPSB0aGlzLl9wYXJ0aWNsZVBvb2wucG9wKCk7XHJcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgcGFydGljbGUgc3RhdHVzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLmdldChwYXJ0aWNsZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24uZ2V0KHBhcnRpY2xlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS5nZXQocGFydGljbGUudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmd1bGFyVmVsb2NpdHkuZ2V0KHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUubGlmZSA9IHRoaXMubGlmZS5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5zcHJpdGVTaXplID0gdGhpcy5zcHJpdGVTaXplLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUud2VpZ2h0ID0gdGhpcy53ZWlnaHQuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFydGljbGUuYWdlID0gMDtcclxuXHJcbiAgICAgICAgICAgIG91dC5wdXNoKHBhcnRpY2xlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBLaWxsIGEgZGVhZCBwYXJ0aWNsZSBhbmQgcHV0IGl0IGJhY2sgaW4gdGhlIHBvb2xcclxuICAgICAqIEBwYXJhbSAge2NsYXkucGFydGljbGUuUGFydGljbGV9IHBhcnRpY2xlXHJcbiAgICAgKi9cclxuICAgIGtpbGw6IGZ1bmN0aW9uKHBhcnRpY2xlKSB7XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVQb29sLnB1c2gocGFydGljbGUpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS5jb25zdGFudH1cclxuICogQGZ1bmN0aW9uIGNsYXkucGFydGljbGUuRW1pdHRlci5jb25zdGFudFxyXG4gKi9cclxuRW1pdHRlci5jb25zdGFudCA9IFZhbHVlLmNvbnN0YW50O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IHZlY3RvciB2YWx1ZSgyZCBvciAzZCkgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUudmVjdG9yfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnZlY3RvclxyXG4gKi9cclxuRW1pdHRlci52ZWN0b3IgPSBWYWx1ZS52ZWN0b3I7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTFEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTFEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTFEID0gVmFsdWUucmFuZG9tMUQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDJkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTJEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTJEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTJEID0gVmFsdWUucmFuZG9tMkQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTNEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTNEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTNEID0gVmFsdWUucmFuZG9tM0Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbWl0dGVyO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBGaWVsZCA9IEJhc2UuZXh0ZW5kKHt9LCB7XHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgZmllbGQgdG8gdGhlIHBhcnRpY2xlIGFuZCB1cGRhdGUgdGhlIHBhcnRpY2xlIHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHdlaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnBhcnRpY2xlLkZpZWxkLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZpZWxkO1xyXG4iLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9GaWVsZCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKi9cclxudmFyIEZvcmNlRmllbGQgPSBGaWVsZC5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZvcmNlOiBuZXcgVmVjdG9yMygpXHJcbiAgICB9O1xyXG59LCB7XHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgaWYgKHdlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh2ZWxvY2l0eS5hcnJheSwgdmVsb2NpdHkuYXJyYXksIHRoaXMuZm9yY2UuYXJyYXksIGRlbHRhVGltZSAvIHdlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZvcmNlRmllbGQ7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnBhcnRpY2xlLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXcgOiBXT1JMRFZJRVc7XFxudW5pZm9ybSBtYXQ0IHByb2plY3Rpb24gOiBQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsIDogTk9STUFMO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDAgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMSA6IFRFWENPT1JEXzE7XFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbnZvaWQgbWFpbigpIHtcXG4gdl9BZ2UgPSBub3JtYWwueDtcXG4gZmxvYXQgcm90YXRpb24gPSBub3JtYWwueTtcXG4gdmVjNCB3b3JsZFZpZXdQb3NpdGlvbiA9IHdvcmxkVmlldyAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHdvcmxkVmlld1Bvc2l0aW9uO1xcbiBmbG9hdCB3ID0gZ2xfUG9zaXRpb24udztcXG4gZ2xfUG9pbnRTaXplID0gbm9ybWFsLnogKiBwcm9qZWN0aW9uWzBdLnggLyB3O1xcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIHZfVXYwID0gdGV4Y29vcmQwO1xcbiB2X1V2MSA9IHRleGNvb3JkMTtcXG4gI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGFydGljbGUuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcHJpdGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnQ7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgY29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuICNpZmRlZiBTUFJJVEVfRU5BQkxFRFxcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIGNvbG9yICo9IHRleHR1cmUyRChzcHJpdGUsIG1peCh2X1V2MCwgdl9VdjEsIGdsX1BvaW50Q29vcmQpKTtcXG4gI2Vsc2VcXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgZ2xfUG9pbnRDb29yZCk7XFxuICNlbmRpZlxcbiAjZW5kaWZcXG4gI2lmZGVmIEdSQURJRU5UX0VOQUJMRURcXG4gY29sb3IgKj0gdGV4dHVyZTJEKGdyYWRpZW50LCB2ZWMyKHZfQWdlLCAwLjUpKTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHBhcnRpY2xlRXNzbCBmcm9tICcuL3BhcnRpY2xlLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHBhcnRpY2xlRXNzbCk7XHJcblxyXG52YXIgcGFydGljbGVTaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUuZnJhZ21lbnQnKSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHBhcnRpY2xlUmVuZGVyYWJsZSA9IG5ldyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uUmVwZWF0OiAxXHJcbiAqICAgICB9KTtcclxuICogICAgIHNjZW5lLmFkZChwYXJ0aWNsZVJlbmRlcmFibGUpO1xyXG4gKiAgICAgLy8gRW5hYmxlIHV2IGFuaW1hdGlvbiBpbiB0aGUgc2hhZGVyXHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubWF0ZXJpYWwuZGVmaW5lKCdib3RoJywgJ1VWX0FOSU1BVElPTicpO1xyXG4gKiAgICAgdmFyIEVtaXR0ZXIgPSBjbGF5LnBhcnRpY2xlLkVtaXR0ZXI7XHJcbiAqICAgICB2YXIgVmVjdG9yMyA9IGNsYXkuVmVjdG9yMztcclxuICogICAgIHZhciBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoe1xyXG4gKiAgICAgICAgIG1heDogMjAwMCxcclxuICogICAgICAgICBhbW91bnQ6IDEwMCxcclxuICogICAgICAgICBsaWZlOiBFbWl0dGVyLnJhbmRvbTFEKDEwLCAyMCksXHJcbiAqICAgICAgICAgcG9zaXRpb246IEVtaXR0ZXIudmVjdG9yKG5ldyBWZWN0b3IzKCkpLFxyXG4gKiAgICAgICAgIHZlbG9jaXR5OiBFbWl0dGVyLnJhbmRvbTNEKG5ldyBWZWN0b3IzKC0xMCwgMCwgLTEwKSwgbmV3IFZlY3RvcjMoMTAsIDAsIDEwKSk7XHJcbiAqICAgICB9KTtcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGRFbWl0dGVyKGVtaXR0ZXIpO1xyXG4gKiAgICAgdmFyIGdyYXZpdHlGaWVsZCA9IG5ldyBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGQoKTtcclxuICogICAgIGdyYXZpdHlGaWVsZC5mb3JjZS55ID0gLTEwO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEZpZWxkKGdyYXZpdHlGaWVsZCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUudXBkYXRlUGFydGljbGVzKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgUGFydGljbGVSZW5kZXJhYmxlID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgbG9vcDogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIG9uZXNob3Q6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBEdXJhdGlvbiBvZiBwYXJ0aWNsZSBzeXN0ZW0gaW4gbWlsbGlzZWNvbmRzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkdXJhdGlvbjogMSxcclxuXHJcbiAgICAvLyBVViBBbmltYXRpb25cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblRpbGVZOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDAsXHJcblxyXG4gICAgbW9kZTogUmVuZGVyYWJsZS5QT0lOVFMsXHJcblxyXG4gICAgaWdub3JlUGlja2luZzogdHJ1ZSxcclxuXHJcbiAgICBfZWxhcHNlZFRpbWU6IDAsXHJcblxyXG4gICAgX2VtaXR0aW5nOiB0cnVlXHJcblxyXG59LCBmdW5jdGlvbigpe1xyXG5cclxuICAgIHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5tYXRlcmlhbCkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHBhcnRpY2xlU2hhZGVyLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ3Nwcml0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlcyA9IFtdO1xyXG4gICAgdGhpcy5fZmllbGRzID0gW107XHJcbiAgICB0aGlzLl9lbWl0dGVycyA9IFtdO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG4gICAgcmVjZWl2ZVNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgYWRkRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnB1c2goZW1pdHRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGVtaXR0ZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5FbWl0dGVyfSBlbWl0dGVyXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVtaXR0ZXI6IGZ1bmN0aW9uKGVtaXR0ZXIpIHtcclxuICAgICAgICB0aGlzLl9lbWl0dGVycy5zcGxpY2UodGhpcy5fZW1pdHRlcnMuaW5kZXhPZihlbWl0dGVyKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGZpZWxkXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRmllbGR9IGZpZWxkXHJcbiAgICAgKi9cclxuICAgIGFkZEZpZWxkOiBmdW5jdGlvbihmaWVsZCkge1xyXG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZSh0aGlzLl9maWVsZHMuaW5kZXhPZihmaWVsZCksIDEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoZSBwYXJ0aWNsZSBzeXN0ZW0uXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuX2VtaXR0aW5nID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVQYXJ0aWNsZXM6IGZ1bmN0aW9uKGRlbHRhVGltZSkge1xyXG5cclxuICAgICAgICAvLyBNUyA9PiBTZWNvbmRzXHJcbiAgICAgICAgZGVsdGFUaW1lIC89IDEwMDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgKz0gZGVsdGFUaW1lO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGVzID0gdGhpcy5fcGFydGljbGVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZW1pdHRpbmcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9lbWl0dGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlcnNbaV0uZW1pdChwYXJ0aWNsZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uZXNob3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFnaW5nXHJcbiAgICAgICAgdmFyIGxlbiA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmFnZSArPSBkZWx0YVRpbWU7XHJcbiAgICAgICAgICAgIGlmIChwLmFnZSA+PSBwLmxpZmUpIHtcclxuICAgICAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzW2ldID0gcGFydGljbGVzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZVxyXG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1tqXS5hcHBseVRvKHAudmVsb2NpdHksIHAucG9zaXRpb24sIHAud2VpZ2h0LCBkZWx0YVRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHAudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICAgICAgLy8gSWYgaGFzIHV2IGFuaW1hdGlvblxyXG4gICAgICAgIHZhciBhbmltVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG4gICAgICAgIHZhciBhbmltVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHZhciBhbmltUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgdmFyIG5VdkFuaW1GcmFtZSA9IGFuaW1UaWxlWSAqIGFuaW1UaWxlWCAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgdmFyIGhhc1V2QW5pbWF0aW9uID0gblV2QW5pbUZyYW1lID4gMTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICAvLyBQdXQgcGFydGljbGUgc3RhdHVzIGluIG5vcm1hbFxyXG4gICAgICAgIHZhciBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHZhciB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoO1xyXG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8IHBvc2l0aW9ucy5sZW5ndGggIT09IGxlbiAqIDMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgICAgICBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgaWYgKGhhc1V2QW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB1dnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgICAgICB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52QW5pbVRpbGVYID0gMSAvIGFuaW1UaWxlWDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zW29mZnNldCArIGpdID0gcGFydGljbGUucG9zaXRpb24uYXJyYXlbal07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldF0gPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsc1tvZmZzZXQgKyAxXSA9IHBhcnRpY2xlLnJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDJdID0gcGFydGljbGUuc3ByaXRlU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0MiA9IGkgKiAyO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIHZhciBwID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcclxuICAgICAgICAgICAgICAgIHZhciBzdGFnZSA9IE1hdGgucm91bmQocCAqIChuVXZBbmltRnJhbWUgLSAxKSkgKiBhbmltUmVwZWF0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBNYXRoLmZsb29yKHN0YWdlICogaW52QW5pbVRpbGVYKTtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gc3RhZ2UgLSB2ICogYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDJdID0gdSAvIGFuaW1UaWxlWDtcclxuICAgICAgICAgICAgICAgIHV2c1tvZmZzZXQyICsgMV0gPSAxIC0gdiAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0Ml0gPSAodSArIDEpIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyICsgMV0gPSAxIC0gKHYgKyAxKSAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0ZpbmlzaGVkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWUgPiB0aGlzLmR1cmF0aW9uICYmICF0aGlzLmxvb3A7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBUT0RPIERpc3Bvc2UgdGV4dHVyZSA/XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IFBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLm1hdGVyaWFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUub25lc2hvdCA9IHRoaXMub25lc2hvdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG5cclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucm90YXRpb24uY29weSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkKHRoaXMuX2NoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFydGljbGVSZW5kZXJhYmxlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlUmVuZGVyYWJsZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGlja2luZy5jb2xvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGVuZFxcbkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLmZyYWdtZW50XFxudW5pZm9ybSB2ZWM0IGNvbG9yIDogWzEuMCwgMS4wLCAxLjAsIDEuMF07XFxudm9pZCBtYWluKCkge1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBjb2xvckVzc2wgZnJvbSAnLi9jb2xvci5nbHNsLmpzJztcclxuU2hhZGVyLmltcG9ydChjb2xvckVzc2wpO1xyXG5cclxuLyoqXHJcbiAqIFBpeGVsIHBpY2tpbmcgaXMgZ3B1IGJhc2VkIHBpY2tpbmcsIHdoaWNoIGlzIGZhc3QgYW5kIGFjY3VyYXRlLlxyXG4gKiBCdXQgbm90IGxpa2UgcmF5IHBpY2tpbmcsIGl0IGNhbid0IGdldCB0aGUgaW50ZXJzZWN0aW9uIHBvaW50IGFuZCB0cmlhbmdsZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmdcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQaXhlbFBpY2tpbmcgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb3duc2FtcGxlIHJhdGlvIG9mIGhpZGRlbiBmcmFtZSBidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvd25TYW1wbGVSYXRpbzogMSxcclxuXHJcbiAgICAgICAgd2lkdGg6IDEwMCxcclxuICAgICAgICBoZWlnaHQ6IDEwMCxcclxuXHJcbiAgICAgICAgbG9va3VwT2Zmc2V0OiAxLFxyXG5cclxuICAgICAgICBfZnJhbWVCdWZmZXI6IG51bGwsXHJcbiAgICAgICAgX3RleHR1cmU6IG51bGwsXHJcbiAgICAgICAgX3NoYWRlcjogbnVsbCxcclxuXHJcbiAgICAgICAgX2lkTWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICBfbG9va3VwVGFibGU6IFtdLFxyXG5cclxuICAgICAgICBfbWVzaE1hdGVyaWFsczogW10sXHJcblxyXG4gICAgICAgIF9pZE9mZnNldDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdCgpO1xyXG59LCAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcucHJvdG90eXBlICovIHtcclxuICAgIF9pbml0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoICogdGhpcy5kb3duU2FtcGxlUmF0aW8sXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgKiB0aGlzLmRvd25TYW1wbGVSYXRpb1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5waWNraW5nLmNvbG9yLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnQnKSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGlja2luZyBwcmVzaXNpb25cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXRQcmVjaXNpb246IGZ1bmN0aW9uKHJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGggKiByYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICogcmF0aW87XHJcbiAgICAgICAgdGhpcy5kb3duU2FtcGxlUmF0aW8gPSByYXRpbztcclxuICAgIH0sXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gd2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IGhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIHBpY2tpbmcgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIGlmIChyZW5kZXJlci5nZXRXaWR0aCgpICE9PSB0aGlzLndpZHRoIHx8IHJlbmRlcmVyLmdldEhlaWdodCgpICE9PSB0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci53aWR0aCwgcmVuZGVyZXIuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0aGlzLl90ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9pZE9mZnNldCA9IHRoaXMubG9va3VwT2Zmc2V0O1xyXG4gICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKHNjZW5lKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVzdG9yZU1hdGVyaWFsKCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE1hdGVyaWFsOiBmdW5jdGlvbihyb290KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9MDsgaSA8IHJvb3QuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJvb3QuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuZ2VvbWV0cnkgJiYgY2hpbGQubWF0ZXJpYWwgJiYgY2hpbGQubWF0ZXJpYWwuc2hhZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9pZE9mZnNldCsrO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IGlkIC0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9zaGFkZXJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBwYWNrSUQoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzBdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsxXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMl0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzNdID0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnY29sb3InLCBjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faWRNYXRlcmlhbHNbaWR4XSA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFsc1tpZHhdID0gY2hpbGQubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpZHhdID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5tYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXRlcmlhbChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGljayB0aGUgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIHZhciByYXRpbyA9IHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHggPSBNYXRoLmNlaWwocmF0aW8gKiB4KTtcclxuICAgICAgICB5ID0gTWF0aC5jZWlsKHJhdGlvICogKHRoaXMuaGVpZ2h0IC0geSkpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgcGl4ZWwgPSBuZXcgVWludDhBcnJheSg0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgLy8gVE9ETyBvdXQgb2YgYm91bmRzID9cclxuICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgP1xyXG4gICAgICAgIF9nbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIF9nbC5SR0JBLCBfZ2wuVU5TSUdORURfQllURSwgcGl4ZWwpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gU2tpcCBpbnRlcnBvbGF0ZWQgcGl4ZWwgYmVjYXVzZSBvZiBhbnRpIGFsaWFzXHJcbiAgICAgICAgaWYgKHBpeGVsWzNdID09PSAyNTUpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gdW5wYWNrSUQocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5fbG9va3VwVGFibGVbaWQgLSB0aGlzLmxvb2t1cE9mZnNldF07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0b3JlTWF0ZXJpYWw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbG9va3VwVGFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaV0ubWF0ZXJpYWwgPSB0aGlzLl9tZXNoTWF0ZXJpYWxzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBwYWNrSUQoaWQpe1xyXG4gICAgdmFyIHIgPSBpZCA+PiAxNjtcclxuICAgIHZhciBnID0gKGlkIC0gKHIgPDwgOCkpID4+IDg7XHJcbiAgICB2YXIgYiA9IGlkIC0gKHIgPDwgMTYpIC0gKGc8PDgpO1xyXG4gICAgcmV0dXJuIFtyLCBnLCBiXTtcclxufVxyXG5cclxuZnVuY3Rpb24gdW5wYWNrSUQociwgZywgYil7XHJcbiAgICByZXR1cm4gKHIgPDwgMTYpICsgKGc8PDgpICsgYjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGl4ZWxQaWNraW5nO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2xcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBjb250cm9sID0gbmV3IGNsYXkucGx1Z2luLkZyZWVDb250cm9sKHtcclxuICogICAgICAgICB0YXJnZXQ6IGNhbWVyYSxcclxuICogICAgICAgICBkb21FbGVtZW50OiByZW5kZXJlci5jYW52YXNcclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICB0aW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBjb250cm9sLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIEZyZWVDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCBkb20gdG8gYmluZCB3aXRoIG1vdXNlIGV2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkb21FbGVtZW50OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNb3VzZSBtb3ZlIHNlbnNpdGl2aXR5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IG1vdmUgc3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNwZWVkOiAwLjQsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXNcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgbG9jayB2ZXJ0aWNhbCBtb3ZlbWVudFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlcnRpY2FsTW92ZUxvY2s6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgX21vdmVGb3J3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUJhY2t3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUxlZnQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlUmlnaHQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfb2Zmc2V0UGl0Y2g6IDAsXHJcbiAgICAgICAgX29mZnNldFJvbGw6IDBcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fbG9ja0NoYW5nZSA9IHRoaXMuX2xvY2tDaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleURvd24gPSB0aGlzLl9rZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9rZXlVcCA9IHRoaXMuX2tleVVwLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmUgPSB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlzKTtcclxuXHJcbiAgICBpZiAodGhpcy5kb21FbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogaW5pdCBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFVzZSBwb2ludGVyIGxvY2tcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL3R1dG9yaWFscy9wb2ludGVybG9jay9pbnRyby9cclxuICAgICAgICB2YXIgZWwgPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vTXVzdCByZXF1ZXN0IHBvaW50ZXIgbG9jayBhZnRlciBjbGljayBldmVudCwgY2FuJ3Qgbm90IGRvIGl0IGRpcmVjdGx5XHJcbiAgICAgICAgLy9XaHkgPyA/XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdjbGljaycsIHRoaXMuX3JlcXVlc3RQb2ludGVyTG9jayk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW96cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXlkb3duJywgdGhpcy5fa2V5RG93bik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAna2V5dXAnLCB0aGlzLl9rZXlVcCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrID0gZWwuZXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLm1vekV4aXRQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC53ZWJraXRFeGl0UG9pbnRlckxvY2s7XHJcblxyXG4gICAgICAgIGlmIChlbC5leGl0UG9pbnRlckxvY2spIHtcclxuICAgICAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlcXVlc3RQb2ludGVyTG9jazogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGVsID0gdGhpcztcclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2sgPSBlbC5yZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96UmVxdWVzdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdFJlcXVlc3RQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgZWwucmVxdWVzdFBvaW50ZXJMb2NrKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbCB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVydGljYWxNb3ZlTG9jaykge1xyXG4gICAgICAgICAgICB6QXhpcy55ID0gMDtcclxuICAgICAgICAgICAgekF4aXMubm9ybWFsaXplKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3BlZWQgPSB0aGlzLnNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2YgelxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLXNwZWVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVCYWNrd2FyZCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1zcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBzcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCA9IHRoaXMuX29mZnNldFBpdGNoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2xvY2tDaGFuZ2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZG9jLnBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy5tb3pQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICAgICB8fCBkb2Mud2Via2l0UG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlTW92ZTogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHZhciBkeCA9IGUubW92ZW1lbnRYIHx8IGUubW96TW92ZW1lbnRYIHx8IGUud2Via2l0TW92ZW1lbnRYIHx8IDA7XHJcbiAgICAgICAgdmFyIGR5ID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pNb3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZHggKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZHkgKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG5cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RldGVjdE1vdmVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkIHx8IHRoaXMuX21vdmVCYWNrd2FyZCB8fCB0aGlzLl9tb3ZlTGVmdCB8fCB0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoZnJhbWVUaW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleURvd246IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgODc6IC8vd1xyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL3VwIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2ODogLy9kXHJcbiAgICAgICAgICAgIGNhc2UgMzk6IC8vcmlnaHQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZXZlbnQgdG8gcmVtaW5kIHJlbmRlcmVyIGRvIHJlbmRlclxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9rZXlVcDogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2NTogLy9hXHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vbGVmdCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJlZUNvbnRyb2w7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIEdhbWVwYWQgQ29udHJvbCBwbHVnaW4uXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgIGluaXQ6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGN1c3RvbUNhbGxiYWNrXHJcbiAqICAgICB9KTtcclxuICogICB9LFxyXG4gKlxyXG4gKiAgIGxvb3A6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wudXBkYXRlKGFwcC5mcmFtZVRpbWUpO1xyXG4gKiAgIH1cclxuICovXHJcbnZhciBHYW1lcGFkQ29udHJvbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdmUgc3BlZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1vdmVTcGVlZDogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMb29rIGFyb3VuZCBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbG9va0Fyb3VuZFNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZWxpbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzdGFuZGFyZCBnYW1lcGFkIGlzIHJlYWR5IHRvIHVzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvblN0YW5kYXJkR2FtZXBhZFJlYWR5OiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIGdhbWVwYWQgaXMgZGlzY29ubmVjdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uR2FtZXBhZERpc2Nvbm5lY3RlZDogZnVuY3Rpb24oZ2FtZXBhZCl7fSxcclxuXHJcbiAgICAgICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzOlxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMCxcclxuXHJcbiAgICAgICAgX2Nvbm5lY3RlZEdhbWVwYWRJbmRleDogMCxcclxuICAgICAgICBfc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICBfZ2FtZXBhZEF4aXNUaHJlc2hvbGQ6IDAuM1xyXG5cclxuICAgIH07XHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5ID0gdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQgPSB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zID0gdGhpcy5fc2NhblByZXNzZWRHYW1lcGFkQnV0dG9ucy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMgPSB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcy5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcclxuXHJcbiAgICAvLyBJZiBicm93c2VyIHN1cHBvcnRzIEdhbWVwYWQgQVBJOlxyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogSW5pdC4gY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZW4gdXNlciBiZWdpbnMgdG8gaW50ZXJhY3Qgd2l0aCBjb25uZWN0ZWQgZ2FtZXBhZDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI2RvbS1nYW1lcGFkZXZlbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGRpc2Nvbm5lY3RlZCcsIHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sJ3MgdXBkYXRlLiBTaG91bGQgYmUgaW52b2tlZCBldmVyeSBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zKCk7XHJcbiAgICAgICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRhcmdldCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dC5cclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmFyIG1vdmVTcGVlZCA9IHRoaXMubW92ZVNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2Ygei5cclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBJZiBuZWNlc3Nhcnk6IHRyaWdnZXIgYHVwZGF0ZWAgZXZlbnQuXHJcbiAgICAgICAgICogWFhYIFRoaXMgY2FuIGVjb25vbWl6ZSByZW5kZXJpbmcgT1BzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlQmFja3dhcmQgPT09IHRydWUgfHwgdGhpcy5fbW92ZUxlZnQgPT09IHRydWVcclxuICAgICAgICAgICAgfHwgdGhpcy5fbW92ZVJpZ2h0ID09PSB0cnVlIHx8IHRoaXMuX29mZnNldFBpdGNoICE9PSAwIHx8IHRoaXMuX29mZnNldFJvbGwgIT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgdmFsdWVzIHRvIGF2b2lkIGxvc3Qgb2YgY29udHJvbC5cclxuXHJcbiAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0aGlzLl9tb3ZlTGVmdCA9IHRoaXMuX21vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFBpdGNoID0gdGhpcy5fb2Zmc2V0Um9sbCA9IDA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBQcml2YXRlIG1ldGhvZHM6XHJcblxyXG4gICAgX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHk6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbm5lY3RlZCBnYW1lcGFkIGhhcyBhICoqc3RhbmRhcmQqKiBsYXlvdXQ6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9nYW1lcGFkLyNyZW1hcHBpbmcgYWJvdXQgc3RhbmRhcmQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKGV2ZW50LmdhbWVwYWQubWFwcGluZyA9PT0gJ3N0YW5kYXJkJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXggPSBldmVudC5nYW1lcGFkLmluZGV4O1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vblN0YW5kYXJkR2FtZXBhZFJlYWR5KGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfZGlzY29ubmVjdEdhbWVwYWQ6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uR2FtZXBhZERpc2Nvbm5lY3RlZChldmVudC5nYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTdGFuZGFyZEdhbWVwYWQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmdldEdhbWVwYWRzKClbdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXhdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnM6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQoKS5idXR0b25zO1xyXG5cclxuICAgICAgICAvLyBGb3IgZWFjaCBnYW1lcGFkIGJ1dHRvbjpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQnV0dG9uSWQgPSAwOyBnYW1lcGFkQnV0dG9uSWQgPCBnYW1lcGFkQnV0dG9ucy5sZW5ndGg7IGdhbWVwYWRCdXR0b25JZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRCdXR0b24gPSBnYW1lcGFkQnV0dG9uc1tnYW1lcGFkQnV0dG9uSWRdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVwYWRCdXR0b24ucHJlc3NlZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2FtZXBhZEJ1dHRvbklkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIFVwXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgRG93blxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9zY2FuSW5jbGluZWRHYW1lcGFkQXhlczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQXhlcyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmF4ZXM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYXhpczpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQXhpc0lkID0gMDsgZ2FtZXBhZEF4aXNJZCA8IGdhbWVwYWRBeGVzLmxlbmd0aDsgZ2FtZXBhZEF4aXNJZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRBeGlzID0gZ2FtZXBhZEF4ZXNbZ2FtZXBhZEF4aXNJZF07XHJcblxyXG4gICAgICAgICAgICAvLyBYWFggV2UgdXNlIGEgdGhyZXNob2xkIGJlY2F1c2UgYXhlcyBhcmUgbmV2ZXIgbmV1dHJhbC5cclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGdhbWVwYWRBeGlzKSA+IHRoaXMuX2dhbWVwYWRBeGlzVGhyZXNob2xkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQXhpc0lkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgc3RpY2sgWMKxXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGdhbWVwYWRBeGlzIDwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZ2FtZXBhZEF4aXMgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFBpdGNoICs9IGdhbWVwYWRBeGlzICogdGhpcy5sb29rQXJvdW5kU3BlZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHYW1lcGFkQ29udHJvbDtcclxuIiwidmFyIEdlc3R1cmVNZ3IgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fdHJhY2sgPSBbXTtcclxufTtcclxuXHJcbkdlc3R1cmVNZ3IucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBHZXN0dXJlTWdyLFxyXG5cclxuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcclxuICAgICAgICB0aGlzLl9kb1RyYWNrKGV2ZW50LCB0YXJnZXQsIHJvb3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvZ25pemUoZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb1RyYWNrOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hlcztcclxuXHJcbiAgICAgICAgaWYgKCF0b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0cmFja0l0ZW0gPSB7XHJcbiAgICAgICAgICAgIHBvaW50czogW10sXHJcbiAgICAgICAgICAgIHRvdWNoZXM6IFtdLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvdWNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gdG91Y2hlc1tpXTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnBvaW50cy5wdXNoKFt0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZXSk7XHJcbiAgICAgICAgICAgIHRyYWNrSXRlbS50b3VjaGVzLnB1c2godG91Y2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2sucHVzaCh0cmFja0l0ZW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcmVjb2duaXplcnMpIHtcclxuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IHJlY29nbml6ZXJzW2V2ZW50TmFtZV0odGhpcy5fdHJhY2ssIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChnZXN0dXJlSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGRpc3QocG9pbnRQYWlyKSB7XHJcbiAgICB2YXIgZHggPSBwb2ludFBhaXJbMV1bMF0gLSBwb2ludFBhaXJbMF1bMF07XHJcbiAgICB2YXIgZHkgPSBwb2ludFBhaXJbMV1bMV0gLSBwb2ludFBhaXJbMF1bMV07XHJcblxyXG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNlbnRlcihwb2ludFBhaXIpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgKHBvaW50UGFpclswXVswXSArIHBvaW50UGFpclsxXVswXSkgLyAyLFxyXG4gICAgICAgIChwb2ludFBhaXJbMF1bMV0gKyBwb2ludFBhaXJbMV1bMV0pIC8gMlxyXG4gICAgXTtcclxufVxyXG5cclxudmFyIHJlY29nbml6ZXJzID0ge1xyXG5cclxuICAgIHBpbmNoOiBmdW5jdGlvbiAodHJhY2ssIGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHRyYWNrTGVuID0gdHJhY2subGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIXRyYWNrTGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwaW5jaEVuZCA9ICh0cmFja1t0cmFja0xlbiAtIDFdIHx8IHt9KS5wb2ludHM7XHJcbiAgICAgICAgdmFyIHBpbmNoUHJlID0gKHRyYWNrW3RyYWNrTGVuIC0gMl0gfHwge30pLnBvaW50cyB8fCBwaW5jaEVuZDtcclxuXHJcbiAgICAgICAgaWYgKHBpbmNoUHJlXHJcbiAgICAgICAgICAgICYmIHBpbmNoUHJlLmxlbmd0aCA+IDFcclxuICAgICAgICAgICAgJiYgcGluY2hFbmRcclxuICAgICAgICAgICAgJiYgcGluY2hFbmQubGVuZ3RoID4gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2YXIgcGluY2hTY2FsZSA9IGRpc3QocGluY2hFbmQpIC8gZGlzdChwaW5jaFByZSk7XHJcbiAgICAgICAgICAgICFpc0Zpbml0ZShwaW5jaFNjYWxlKSAmJiAocGluY2hTY2FsZSA9IDEpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucGluY2hTY2FsZSA9IHBpbmNoU2NhbGU7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGluY2hDZW50ZXIgPSBjZW50ZXIocGluY2hFbmQpO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFggPSBwaW5jaENlbnRlclswXTtcclxuICAgICAgICAgICAgZXZlbnQucGluY2hZID0gcGluY2hDZW50ZXJbMV07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3BpbmNoJyxcclxuICAgICAgICAgICAgICAgIHRhcmdldDogdHJhY2tbMF0udGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZU1ncjtcclxuIiwiaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcblxyXG52YXIgdXZzID0gW1swLCAwXSwgWzAsIDFdLCBbMSwgMV0sIFsxLCAwXV07XHJcbnZhciB0cmlzID0gWzAsIDEsIDIsIDIsIDMsIDBdO1xyXG5cclxudmFyIEluZmluaXRlUGxhbmUgPSBNZXNoLmV4dGVuZCh7XHJcblxyXG4gICAgY2FtZXJhOiBudWxsLFxyXG5cclxuICAgIHBsYW5lOiBudWxsLFxyXG5cclxuICAgIG1heEdyaWQ6IDAsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2KTtcclxuXHJcbiAgICB0aGlzLnBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVHZW9tZXRyeTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgY29vcmRzID0gdGhpcy5fdW5Qcm9qZWN0R3JpZCgpO1xyXG4gICAgICAgIGlmICghY29vcmRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWw7XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDA7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSB0cmlzW2ldO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuc2V0KGksIGNvb3Jkc1tpZHhdLmFycmF5KTtcclxuICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQoaSwgdGhpcy5wbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICB0ZXhjb29yZHMuc2V0KGksIHV2c1tpZHhdKTtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2ZpbGVhZG1pbi5jcy5sdGguc2UvZ3JhcGhpY3MvdGhlc2VzL3Byb2plY3RzL3Byb2pncmlkL1xyXG4gICAgX3VuUHJvamVjdEdyaWQ6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBwbGFuZVZpZXdTcGFjZSA9IG5ldyBQbGFuZSgpO1xyXG4gICAgICAgIHZhciBsaW5lcyA9IFtcclxuICAgICAgICAgICAgMCwgMSwgMCwgMiwgMSwgMywgMiwgMyxcclxuICAgICAgICAgICAgNCwgNSwgNCwgNiwgNSwgNywgNiwgNyxcclxuICAgICAgICAgICAgMCwgNCwgMSwgNSwgMiwgNiwgMywgN1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIGVuZCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gMS0tLS0yXHJcbiAgICAgICAgLy8gfCAgICB8XHJcbiAgICAgICAgLy8gMC0tLS0zXHJcbiAgICAgICAgdmFyIGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvb3Jkc1tpXSA9IG5ldyBWZWN0b3IzKDAsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuY29weSh0aGlzLnBsYW5lKTtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuYXBwbHlUcmFuc2Zvcm0odGhpcy5jYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJ1c3R1bVZlcnRpY2VzID0gdGhpcy5jYW1lcmEuZnJ1c3R1bS52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBuUG9pbnRzID0gMDtcclxuICAgICAgICAgICAgLy8gSW50ZXJzZWN0IHdpdGggbGluZXMgb2YgZnJ1c3R1bVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0LmFycmF5ID0gZnJ1c3R1bVZlcnRpY2VzW2xpbmVzW2kgKiAyXV07XHJcbiAgICAgICAgICAgICAgICBlbmQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDIgKyAxXV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ID0gcGxhbmVWaWV3U3BhY2UuaW50ZXJzZWN0TGluZShzdGFydCwgZW5kLCBwb2ludHNbblBvaW50c10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2ludHNbblBvaW50c10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW25Qb2ludHNdID0gcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5Qb2ludHMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoblBvaW50cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHNbaV0uYXBwbHlQcm9qZWN0aW9uKHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBtaW5YID0gcG9pbnRzWzBdLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgbWluWSA9IHBvaW50c1swXS5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmFyIG1heFggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtYXhZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG5Qb2ludHM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwb2ludHNbaV0uYXJyYXlbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvaW50c1tpXS5hcnJheVsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1pblggPT0gbWF4WCB8fCBtaW5ZID09IG1heFkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMV0gPSBtaW5ZO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMV0gPSBtaW5ZO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmNhc3RSYXkoY29vcmRzW2ldLCByYXkpO1xyXG4gICAgICAgICAgICAgICAgcmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIGNvb3Jkc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZHM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZVBsYW5lO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciBmcm9tICcuL0dlc3R1cmVNZ3InO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG52YXIgTU9VU0VfQlVUVE9OX0tFWV9NQVAgPSB7XHJcbiAgICBsZWZ0OiAwLFxyXG4gICAgbWlkZGxlOiAxLFxyXG4gICAgcmlnaHQ6IDJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGZpcnN0Tm90TnVsbCgpIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRUb0FycmF5KHZhbCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcclxuICAgICAgICB2YWwgPSBbdmFsLCB2YWxdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgT3JiaXRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLk9yYml0Q29udHJvbCMgKi8ge1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NlbnRlcjogbmV3IFZlY3RvcjMoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBkaXN0YW5jZSB0byB0aGUgY2VudGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5EaXN0YW5jZTogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDJcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhEaXN0YW5jZTogMTAwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT25seSBhdmFpbGFibGUgd2hlbiBjYW1lcmEgaXMgb3J0aG9ncmFwaGljXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4T3J0aG9ncmFwaGljU2l6ZTogMzAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5PcnRob2dyYXBoaWNTaXplOiAzMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXNwZWN0IG9mIG9ydGhvZ3JhcGhpYyBjYW1lcmFcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBvcnRob2dyYXBoaWNBc3BlY3Q6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5BbHBoYTogLTkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGFscGhhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QWxwaGE6IDkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5CZXRhOiAtSW5maW5pdHksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWF4aW11bSBiZXRhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QmV0YTogSW5maW5pdHksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YXJ0IGF1dG8gcm90YXRpbmcgYWZ0ZXIgc3RpbGwgZm9yIHRoZSBnaXZlbiB0aW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZUFmdGVyU3RpbGw6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERpcmVjdGlvbiBvZiBhdXRvUm90YXRlLiBjdyBvciBjY3cgd2hlbiBsb29raW5nIHRvcCBkb3duLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9Sb3RhdGVEaXJlY3Rpb246ICdjdycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZ3JlZSBwZXIgc2Vjb25kXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZVNwZWVkOiA2MCxcclxuXHJcbiAgICAgICAgcGFuTW91c2VCdXR0b246ICdtaWRkbGUnLFxyXG4gICAgICAgIHJvdGF0ZU1vdXNlQnV0dG9uOiAnbGVmdCcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBhbiBvciByb3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2RlOiAncm90YXRlJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGFtcGluZzogMC44LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3RhdGVTZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgem9vbVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwYW5TZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgX25lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3JvdGF0aW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gUm90YXRpb24gYXJvdW5kIHlBeGlzXHJcbiAgICAgICAgX3BoaTogMCxcclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeEF4aXNcclxuICAgICAgICBfdGhldGE6IDAsXHJcblxyXG4gICAgICAgIF9tb3VzZVg6IDAsXHJcbiAgICAgICAgX21vdXNlWTogMCxcclxuXHJcbiAgICAgICAgX3JvdGF0ZVZlbG9jaXR5OiBuZXcgVmVjdG9yMigpLFxyXG5cclxuICAgICAgICBfcGFuVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9kaXN0YW5jZTogMjAsXHJcblxyXG4gICAgICAgIF96b29tU3BlZWQ6IDAsXHJcblxyXG4gICAgICAgIF9zdGlsbFRpbWVvdXQ6IDAsXHJcblxyXG4gICAgICAgIF9hbmltYXRvcnM6IFtdLFxyXG5cclxuICAgICAgICBfZ2VzdHVyZU1ncjogbmV3IEdlc3R1cmVNZ3IoKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gRWFjaCBPcmJpdENvbnRyb2wgaGFzIGl0J3Mgb3duIGhhbmRsZXJcclxuICAgIHRoaXMuX21vdXNlRG93bkhhbmRsZXIgPSB0aGlzLl9tb3VzZURvd25IYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlciA9IHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyID0gdGhpcy5fbW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fbW91c2VVcEhhbmRsZXIgPSB0aGlzLl9tb3VzZVVwSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fcGluY2hIYW5kbGVyID0gdGhpcy5fcGluY2hIYW5kbGVyLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemUuXHJcbiAgICAgKiBNb3VzZSBldmVudCBiaW5kaW5nXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaHN0YXJ0JywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlZG93bicsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9uKCdmcmFtZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UuXHJcbiAgICAgKiBNb3VzZSBldmVudCB1bmJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2V1cCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd3aGVlbCcsIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW91dCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb24oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGlzdGFuY2VcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICAgICAqL1xyXG4gICAgc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRPcnRob2dyYXBoaWNTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29ydGhvU2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgc2l6ZSBvZiBvcnRob2dyYXBoaWMgdmlld2luZyB2b2x1bWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXHJcbiAgICAgKi9cclxuICAgIHNldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gc2l6ZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFscGhhIHJvdGF0aW9uXHJcbiAgICAgKiBBbHBoYSBhbmdsZSBmb3IgdG9wLWRvd24gcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byB0b3AuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB4IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEFscGhhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZXRhIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYmV0YSByb3RhdGlvblxyXG4gICAgICogQmV0YSBhbmdsZSBmb3IgbGVmdC1yaWdodCByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHJpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIFdoaWNoIG1lYW5zIGNhbWVyYSByb3RhdGlvbiBhcm91bmQgeSBheGlzLlxyXG4gICAgICovXHJcbiAgICBnZXRCZXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIC10aGlzLl9waGkgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jZW50ZXIudG9BcnJheSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbHBoYSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFscGhhXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpIHtcclxuICAgICAgICBhbHBoYSA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4QWxwaGEsIGFscGhhKSwgdGhpcy5taW5BbHBoYSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYmV0YSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJldGFcclxuICAgICAqL1xyXG4gICAgc2V0QmV0YTogZnVuY3Rpb24gKGJldGEpIHtcclxuICAgICAgICBiZXRhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhCZXRhLCBiZXRhKSwgdGhpcy5taW5CZXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29udHJvbCBjZW50ZXJcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGNlbnRlclxyXG4gICAgICovXHJcbiAgICBzZXRDZW50ZXI6IGZ1bmN0aW9uIChjZW50ZXJBcnIpIHtcclxuICAgICAgICB0aGlzLl9jZW50ZXIuc2V0QXJyYXkoY2VudGVyQXJyKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0T3B0aW9uOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgICAgICBbJ2F1dG9Sb3RhdGUnLCAnYXV0b1JvdGF0ZUFmdGVyU3RpbGwnLFxyXG4gICAgICAgICAgICAnYXV0b1JvdGF0ZURpcmVjdGlvbicsICdhdXRvUm90YXRlU3BlZWQnLFxyXG4gICAgICAgICAgICAnZGFtcGluZycsXHJcbiAgICAgICAgICAgICdtaW5EaXN0YW5jZScsICdtYXhEaXN0YW5jZScsXHJcbiAgICAgICAgICAgICdtaW5PcnRob2dyYXBoaWNTaXplJywgJ21heE9ydGhvZ3JhcGhpY1NpemUnLCAnb3J0aG9ncmFwaGljQXNwZWN0JyxcclxuICAgICAgICAgICAgJ21pbkFscGhhJywgJ21heEFscGhhJywgJ21pbkJldGEnLCAnbWF4QmV0YScsXHJcbiAgICAgICAgICAgICdyb3RhdGVTZW5zaXRpdml0eScsICd6b29tU2Vuc2l0aXZpdHknLCAncGFuU2Vuc2l0aXZpdHknXHJcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKG9wdHNba2V5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldERpc3RhbmNlKG9wdHMuZGlzdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRPcnRob2dyYXBoaWNTaXplKG9wdHMub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWxwaGEob3B0cy5hbHBoYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEJldGEob3B0cy5iZXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmNlbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcihvcHRzLmNlbnRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLm9ydGhvZ3JhcGhpY1NpemVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmFscGhhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5iZXRhXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvcHRzLmNlbnRlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmR1cmF0aW9uPTEwMDBdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZWFzaW5nPSdsaW5lYXInXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmRvbmVdXHJcbiAgICAgKi9cclxuICAgIGFuaW1hdGVUbzogZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBvYmogPSB7fTtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0ge307XHJcbiAgICAgICAgdmFyIHRpbWVsaW5lID0gdGhpcy50aW1lbGluZTtcclxuICAgICAgICBpZiAoIXRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5kaXN0YW5jZSA9IG9wdHMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmoub3J0aG9ncmFwaGljU2l6ZSA9IHRoaXMuZ2V0T3J0aG9ncmFwaGljU2l6ZSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQub3J0aG9ncmFwaGljU2l6ZSA9IG9wdHMub3J0aG9ncmFwaGljU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYWxwaGEgPSB0aGlzLmdldEFscGhhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbHBoYSA9IG9wdHMuYWxwaGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYmV0YSA9IHRoaXMuZ2V0QmV0YSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQuYmV0YSA9IG9wdHMuYmV0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb2JqLmNlbnRlciA9IHRoaXMuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5jZW50ZXIgPSBvcHRzLmNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRBbmltYXRvcihcclxuICAgICAgICAgICAgdGltZWxpbmUuYW5pbWF0ZShvYmopXHJcbiAgICAgICAgICAgICAgICAud2hlbihvcHRzLmR1cmF0aW9uIHx8IDEwMDAsIHRhcmdldClcclxuICAgICAgICAgICAgICAgIC5kdXJpbmcoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldEFscGhhKG9iai5hbHBoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QmV0YShvYmouYmV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERpc3RhbmNlKG9iai5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0T3J0aG9ncmFwaGljU2l6ZShvYmoub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRDZW50ZXIob2JqLmNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZG9uZShvcHRzLmRvbmUpXHJcbiAgICAgICAgKS5zdGFydChvcHRzLmVhc2luZyB8fCAnbGluZWFyJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBhbGwgYW5pbWF0aW9uc1xyXG4gICAgICovXHJcbiAgICBzdG9wQWxsQW5pbWF0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9hbmltYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0b3JzW2ldLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0b3JzLmxlbmd0aCA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pc0FuaW1hdGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID4gMDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGwgdXBkYXRlIGVhY2ggZnJhbWVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIGRlbHRhVGltZSA9IGRlbHRhVGltZSB8fCAxNjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XHJcbiAgICAgICAgICAgIHZhciByYWRpYW4gPSAodGhpcy5hdXRvUm90YXRlRGlyZWN0aW9uID09PSAnY3cnID8gMSA6IC0xKVxyXG4gICAgICAgICAgICAgICAgKiB0aGlzLmF1dG9Sb3RhdGVTcGVlZCAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BoaSAtPSByYWRpYW4gKiBkZWx0YVRpbWUgLyAxMDAwO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3JvdGF0ZVZlbG9jaXR5LmxlbigpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5fem9vbVNwZWVkKSA+IDAuMDEgfHwgdGhpcy5fcGFuVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fbmVlZHNVcGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRml4ZWQgZGVsdGFUaW1lXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzdGFuY2VPclNpemUoTWF0aC5taW4oZGVsdGFUaW1lLCA1MCkpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhbihNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVJvdGF0ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCd1cGRhdGUnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVJvdGF0ZTogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3JvdGF0ZVZlbG9jaXR5O1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IHZlbG9jaXR5LnkgKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3BoaTtcclxuICAgICAgICB0aGlzLl90aGV0YSA9IHZlbG9jaXR5LnggKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3RoZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEFscGhhKHRoaXMuZ2V0QWxwaGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRCZXRhKHRoaXMuZ2V0QmV0YSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgdGhpcy5kYW1waW5nKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZURpc3RhbmNlT3JTaXplOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy5fZGlzdGFuY2UgKyB0aGlzLl96b29tU3BlZWQgKiBkZWx0YVRpbWUgLyAyMCk7XHJcbiAgICAgICAgaWYgKCEodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMuX29ydGhvU2l6ZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3pvb21TcGVlZCAqPSBNYXRoLnBvdyh0aGlzLmRhbXBpbmcsIGRlbHRhVGltZSAvIDE2KTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldERpc3RhbmNlOiBmdW5jdGlvbiAoZGlzdGFuY2UpIHtcclxuICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKGRpc3RhbmNlLCB0aGlzLm1heERpc3RhbmNlKSwgdGhpcy5taW5EaXN0YW5jZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRPcnRob1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gTWF0aC5tYXgoTWF0aC5taW4oc2l6ZSwgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplKSwgdGhpcy5taW5PcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy50YXJnZXQ7XHJcbiAgICAgICAgdmFyIGNhbWVyYUhlaWdodCA9IHRoaXMuX29ydGhvU2l6ZTtcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgdmFyIGNhbWVyYVdpZHRoID0gY2FtZXJhSGVpZ2h0ICogdGhpcy5vcnRob2dyYXBoaWNBc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGNhbWVyYVdpZHRoIC8gMjtcclxuICAgICAgICBjYW1lcmEudG9wID0gY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gLWNhbWVyYUhlaWdodCAvIDI7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVQYW46IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB2YXIgdmVsb2NpdHkgPSB0aGlzLl9wYW5WZWxvY2l0eTtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fZGlzdGFuY2U7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgeUF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueTtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueDtcclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHRoaXMuX2NlbnRlclxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeEF4aXMsIC12ZWxvY2l0eS54ICogbGVuIC8gMjAwKVxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeUF4aXMsIC12ZWxvY2l0eS55ICogbGVuIC8gMjAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgMCk7XHJcblxyXG4gICAgICAgIHZlbG9jaXR5LnggPSB2ZWxvY2l0eS55ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgdmFyIGRpciA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5fdGhldGEgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgcGhpID0gdGhpcy5fcGhpICsgTWF0aC5QSSAvIDI7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnNpbih0aGV0YSk7XHJcblxyXG4gICAgICAgIGRpci54ID0gciAqIE1hdGguY29zKHBoaSk7XHJcbiAgICAgICAgZGlyLnkgPSAtTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgIGRpci56ID0gciAqIE1hdGguc2luKHBoaSk7XHJcblxyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMuX2NlbnRlcikuc2NhbGVBbmRBZGQoZGlyLCB0aGlzLl9kaXN0YW5jZSk7XHJcbiAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmlkZW50aXR5KClcclxuICAgICAgICAgICAgLy8gRmlyc3QgYXJvdW5kIHksIHRoZW4gYXJvdW5kIHhcclxuICAgICAgICAgICAgLnJvdGF0ZVkoLXRoaXMuX3BoaSlcclxuICAgICAgICAgICAgLnJvdGF0ZVgoLXRoaXMuX3RoZXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3N0YXJ0Q291bnRpbmdTdGlsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGlsbFRpbWVvdXQpO1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuYXV0b1JvdGF0ZUFmdGVyU3RpbGw7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICghaXNOYU4odGltZSkgJiYgdGltZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RpbGxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9yb3RhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIHRpbWUgKiAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF92ZWN0b3JEYW1waW5nOiBmdW5jdGlvbiAodiwgZGFtcGluZykge1xyXG4gICAgICAgIHZhciBzcGVlZCA9IHYubGVuKCk7XHJcbiAgICAgICAgc3BlZWQgPSBzcGVlZCAqIGRhbXBpbmc7XHJcbiAgICAgICAgaWYgKHNwZWVkIDwgMWUtNCkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHYubm9ybWFsaXplKCkuc2NhbGUoc3BlZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZVdvcmxkVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHZhciBmb3J3YXJkID0gdGhpcy50YXJnZXQud29ybGRUcmFuc2Zvcm0uejtcclxuICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLmFzaW4oZm9yd2FyZC55KTtcclxuICAgICAgICB2YXIgYmV0YSA9IE1hdGguYXRhbjIoZm9yd2FyZC54LCBmb3J3YXJkLnopO1xyXG5cclxuICAgICAgICB0aGlzLl90aGV0YSA9IGFscGhhO1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IC1iZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy50YXJnZXQucG9zaXRpb24uZGlzdCh0aGlzLl9jZW50ZXIpKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSl7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE9ydGhvU2l6ZSh0aGlzLnRhcmdldC50b3AgLSB0aGlzLnRhcmdldC5ib3R0b20pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlRG93bkhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeCA9IGUuY2xpZW50WDtcclxuICAgICAgICB2YXIgeSA9IGUuY2xpZW50WTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9tb2RlID0gJ3JvdGF0ZSc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnc3RhcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5yb3RhdGVNb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5wYW5Nb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncGFuJztcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFZlbmRvcnMgbGlrZSBNb3ppbGxhIHByb3ZpZGUgYSBtb3VzZS1kcml2ZW4gcGFubmluZyBmZWF0dXJlXHJcbiAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIGFjdGl2YXRlZCB3aGVuIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2V2ZW50LXR5cGUtbW91c2Vkb3duXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICAvLyBSZXNldCByb3RhdGUgdmVsb2NpdHlcclxuICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS5zZXQoMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcclxuICAgICAgICB0aGlzLl9tb3VzZVkgPSB5O1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG5cclxuICAgICAgICB2YXIgaGF2ZUdlc3R1cmU7XHJcbiAgICAgICAgLy8gVG91Y2hcclxuICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3VjaCA9IGUudGFyZ2V0VG91Y2hlc1swXTtcclxuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XHJcbiAgICAgICAgICAgIHkgPSB0b3VjaC5jbGllbnRZO1xyXG5cclxuICAgICAgICAgICAgaGF2ZUdlc3R1cmUgPSB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnY2hhbmdlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFuU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnBhblNlbnNpdGl2aXR5KTtcclxuICAgICAgICB2YXIgcm90YXRlU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnJvdGF0ZVNlbnNpdGl2aXR5KTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXZlR2VzdHVyZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnkgKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueCArPSAoeSAtIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX21vZGUgPT09ICdwYW4nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS54ICs9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHBhblNlbnNpdGl2aXR5WzBdICogNDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFuVmVsb2NpdHkueSArPSAoLXkgKyB0aGlzLl9tb3VzZVkpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHBhblNlbnNpdGl2aXR5WzFdICogNDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VXaGVlbEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBkZWx0YSA+IDAgPyAxIDogLTEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGluY2hIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fem9vbUhhbmRsZXIoZSwgZS5waW5jaFNjYWxlID4gMSA/IC0wLjQgOiAwLjQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfem9vbUhhbmRsZXI6IGZ1bmN0aW9uIChlLCBkZWx0YSkge1xyXG5cclxuICAgICAgICB2YXIgc3BlZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlIC0gdGhpcy5taW5EaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2UgLSB0aGlzLl9kaXN0YW5jZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX29ydGhvU2l6ZSAtIHRoaXMubWluT3J0aG9ncmFwaGljU2l6ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4T3J0aG9ncmFwaGljU2l6ZSAtIHRoaXMuX29ydGhvU2l6ZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkID0gKGRlbHRhID4gMCA/IC0xIDogMSkgKiBzcGVlZCAqIHRoaXMuem9vbVNlbnNpdGl2aXR5O1xyXG5cclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlICYmIHRoaXMuX21vZGUgPT09ICdyb3RhdGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVVwSGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShldmVudCwgJ2VuZCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBhbmltYXRvcnMgPSB0aGlzLl9hbmltYXRvcnM7XHJcbiAgICAgICAgYW5pbWF0b3JzLnB1c2goYW5pbWF0b3IpO1xyXG4gICAgICAgIGFuaW1hdG9yLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gYW5pbWF0b3JzLmluZGV4T2YoYW5pbWF0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbmltYXRvcjtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIF9wcm9jZXNzR2VzdHVyZTogZnVuY3Rpb24gKGV2ZW50LCBzdGFnZSkge1xyXG4gICAgICAgIHZhciBnZXN0dXJlTWdyID0gdGhpcy5fZ2VzdHVyZU1ncjtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdzdGFydCcgJiYgZ2VzdHVyZU1nci5jbGVhcigpO1xyXG5cclxuICAgICAgICB2YXIgZ2VzdHVyZUluZm8gPSBnZXN0dXJlTWdyLnJlY29nbml6ZShcclxuICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHN0YWdlID09PSAnZW5kJyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIC8vIERvIG5vdCBkbyBhbnkgcHJldmVudERlZmF1bHQgaGVyZS4gVXBwZXIgYXBwbGljYXRpb24gZG8gdGhhdCBpZiBuZWNlc3NhcnkuXHJcbiAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gZ2VzdHVyZUluZm8udHlwZTtcclxuICAgICAgICAgICAgZXZlbnQuZ2VzdHVyZUV2ZW50ID0gdHlwZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BpbmNoSGFuZGxlcihnZXN0dXJlSW5mby5ldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VzdHVyZUluZm87XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIElmIGF1dG8gcm90YXRlIHRoZSB0YXJnZXRcclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBkZWZhdWx0IGZhbHNlXHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT3JiaXRDb250cm9sLnByb3RvdHlwZSwgJ2F1dG9Sb3RhdGUnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1JvdGF0ZTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICB0aGlzLl9hdXRvUm90YXRlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gdmFsO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAndGFyZ2V0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICBpZiAodmFsICYmIHZhbC50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDZW50ZXIodmFsLnRhcmdldC50b0FycmF5KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3JiaXRDb250cm9sO1xyXG4iLCIvKipcclxuICogU3RhdGljR2VvbWV0cnkgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgdGhleSd2ZSBiZWVuIHNldHVwXHJcbiAqL1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGF0aWNHZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqL1xyXG52YXIgU3RhdGljR2VvbWV0cnkgPSBHZW9tZXRyeS5leHRlbmQoe1xyXG4gICAgZHluYW1pYzogZmFsc2VcclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IFN0YXRpY0dlb21ldHJ5O1xyXG4iLCIvLyBUT0RPIHRlc3RcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBOb2RlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkudXRpbC5tZXNoXHJcbiAqL1xyXG52YXIgbWVzaFV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIE1lcmdlIG11bHRpcGxlIG1lc2hlcyB0byBvbmUuXHJcbiAgICAgKiBOb3RlIHRoYXQgdGhlc2UgbWVzaGVzIG11c3QgaGF2ZSB0aGUgc2FtZSBtYXRlcmlhbFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPGNsYXkuTWVzaD59IG1lc2hlc1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhcHBseVdvcmxkVHJhbnNmb3JtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChtZXNoZXMsIGFwcGx5V29ybGRUcmFuc2Zvcm0pIHtcclxuXHJcbiAgICAgICAgaWYgKCEgbWVzaGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcGxhdGVNZXNoID0gbWVzaGVzWzBdO1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZUdlbyA9IHRlbXBsYXRlTWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0ZW1wbGF0ZU1lc2gubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVzID0gdGVtcGxhdGVHZW8uZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0ciA9IHRlbXBsYXRlR2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIC8vIEV4dGVuZCBjdXN0b20gYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyLmNsb25lKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2VNYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IGRhdGEgYW5kIG1lcmdlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICB2YXIgbkZhY2UgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzaGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaGVzW2tdLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudEdlby5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEdlby5ib3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybShhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaGVzW2tdLndvcmxkVHJhbnNmb3JtIDogbWVzaGVzW2tdLmxvY2FsVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94LnVuaW9uKGN1cnJlbnRHZW8uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5WZXJ0ZXggKz0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgbkZhY2UgKz0gY3VycmVudEdlby50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbbl07XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBhdHRyaWIuaW5pdChuVmVydGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5WZXJ0ZXggPj0gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdXNlSW5kaWNlcyA9IHRlbXBsYXRlR2VvLmlzVXNlSW5kaWNlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBtbSA9IDA7IG1tIDwgbWVzaGVzLmxlbmd0aDsgbW0rKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IG1lc2hlc1ttbV07XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaC5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4ID0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSBhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaC53b3JsZFRyYW5zZm9ybS5hcnJheSA6IG1lc2gubG9jYWxUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgbm4gPSAwOyBubiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbm4rKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tubl07XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEF0dHIgPSBjdXJyZW50R2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1bnVzZWQgYXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudEF0dHIudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gY3VycmVudEF0dHIudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBjdXJyZW50QXR0ci5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZlcnRleE9mZnNldCAqIHNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBsZW4gLyBzaXplO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEF0dHIudmFsdWVbb2Zmc2V0ICsgaV0gPSBjdXJyZW50QXR0ci52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwb3NpdGlvbiwgbm9ybWFsIGFuZCB0YW5nZW50XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3Bvc2l0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnbm9ybWFsJyB8fCBuYW1lID09PSAndGFuZ2VudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmZvckVhY2godGFyZ2V0QXR0ci52YWx1ZSwgc2l6ZSwgb2Zmc2V0LCBjb3VudCwgdmVjMy50cmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZUluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50R2VvLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXNbaSArIGluZGljZXNPZmZzZXRdID0gY3VycmVudEdlby5pbmRpY2VzW2ldICsgdmVydGV4T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc09mZnNldCArPSBsZW47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBuVmVydGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGxpdCBtZXNoIGludG8gc3ViIG1lc2hlcywgZWFjaCBtZXNoIHdpbGwgaGF2ZSBtYXhKb2ludE51bWJlciBqb2ludHMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWVzaH0gbWVzaFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heEpvaW50TnVtYmVyXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluUGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG5cclxuICAgIC8vIEZJWE1FLCBIYXZlIGlzc3VlcyBvbiBzb21lIG1vZGVsc1xyXG4gICAgc3BsaXRCeUpvaW50czogZnVuY3Rpb24gKG1lc2gsIG1heEpvaW50TnVtYmVyLCBpblBsYWNlKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBtZXNoLnNrZWxldG9uO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGpvaW50cyA9IG1lc2guam9pbnRzO1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkgfHwgIXNrZWxldG9uIHx8ICFqb2ludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpvaW50cy5sZW5ndGggPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIHZhciBmYWNlTGVuID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcclxuICAgICAgICB2YXIgcmVzdCA9IGZhY2VMZW47XHJcbiAgICAgICAgdmFyIGlzRmFjZUFkZGVkID0gW107XHJcbiAgICAgICAgdmFyIGpvaW50VmFsdWVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhY2VMZW47IGkrKykge1xyXG4gICAgICAgICAgICBpc0ZhY2VBZGRlZFtpXSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRkZWRKb2ludElkeFBlckZhY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGJ1Y2tldHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGdldEpvaW50QnlJbmRleCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50c1tpZHhdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hpbGUgKHJlc3QgPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRUcmlhbmdsZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcCA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRzID0gW107XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VMZW47IGYrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmFjZUFkZGVkW2ZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FuQWRkVG9CdWNrZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFkZGVkTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBpbmRpY2VzW2YgKiAzICsgaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGpvaW50VmFsdWVzW2lkeCAqIDQgKyBqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViSm9pbnROdW1iZXIgPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID0gc3ViSm9pbnROdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50c1tzdWJKb2ludE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZEpvaW50SWR4UGVyRmFjZVthZGRlZE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWRkVG9CdWNrZXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhbkFkZFRvQnVja2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBvcGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGVkTnVtYmVyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2FkZGVkSm9pbnRJZHhQZXJGYWNlW2ldXSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YkpvaW50TnVtYmVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0VHJpYW5nbGVzLnB1c2goaW5kaWNlcy5zdWJhcnJheShmICogMywgKGYgKyAxKSAqIDMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGYWNlQWRkZWRbZl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3QtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBidWNrZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdHJpYW5nbGVzOiBidWNrZXRUcmlhbmdsZXMsXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldEpvaW50cy5tYXAoZ2V0Sm9pbnRCeUluZGV4KSxcclxuICAgICAgICAgICAgICAgIGpvaW50UmV2ZXJzZU1hcDogYnVja2V0Sm9pbnRSZXZlcnNlTWFwXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3QgPSBuZXcgTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciBhdHRyaWJOYW1lcyA9IGdlb21ldHJ5LmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIGF0dHJpYk5hbWVzLnNwbGljZShhdHRyaWJOYW1lcy5pbmRleE9mKCdqb2ludCcpLCAxKTtcclxuICAgICAgICAvLyBNYXAgZnJvbSBvbGQgdmVydGV4IGluZGV4IHRvIG5ldyB2ZXJ0ZXggaW5kZXhcclxuICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgYnVja2V0cy5sZW5ndGg7IGIrKykge1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0ID0gYnVja2V0c1tiXTtcclxuICAgICAgICAgICAgdmFyIGpvaW50UmV2ZXJzZU1hcCA9IGJ1Y2tldC5qb2ludFJldmVyc2VNYXA7XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IGJ1Y2tldC5qb2ludHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1YkdlbyA9IG5ldyBHZW9tZXRyeSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbbWVzaC5uYW1lLCBpXS5qb2luKCctJyksXHJcbiAgICAgICAgICAgICAgICAvLyBET04nVCBjbG9uZSBtYXRlcmlhbC5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBzdWJHZW8sXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbjogc2tlbGV0b24sXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldC5qb2ludHMuc2xpY2UoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleDIgPSBnZW9tZXRyeS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ291bnQgc3ViIGdlbyBudW1iZXJcclxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBidWNrZXQudHJpYW5nbGVzLmxlbmd0aDsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBmYWNlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgIHN1YkF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoblZlcnRleCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoICogMyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0cmlhbmdsZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdHJpYW5nbGVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmliTmFtZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJOYW1lID0gYXR0cmliTmFtZXNbYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmliID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmliLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJBdHRyaWIudmFsdWVbblZlcnRleCAqIHNpemUgKyBqXSA9IGF0dHJpYi52YWx1ZVtpZHggKiBzaXplICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbaWR4ICogNCArIGpdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IG5WZXJ0ZXggKiA0ICsgajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbb2Zmc2V0XSA9IGpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlc1tpbmRpY2VzT2Zmc2V0KytdID0gbmV3SW5kaWNlc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby51cGRhdGVCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5hZGQoc3ViTWVzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IG1lc2guY2hpbGRyZW4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5wb3NpdGlvbi5jb3B5KG1lc2gucG9zaXRpb24pO1xyXG4gICAgICAgIHJvb3Qucm90YXRpb24uY29weShtZXNoLnJvdGF0aW9uKTtcclxuICAgICAgICByb290LnNjYWxlLmNvcHkobWVzaC5zY2FsZSk7XHJcblxyXG4gICAgICAgIGlmIChpblBsYWNlKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXNoLmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gbWVzaC5nZXRQYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmUobWVzaCk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQuYWRkKHJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb290O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWVzaFV0aWw7XHJcbiIsImltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbnZhciBNRVRBID0ge1xyXG4gICAgdmVyc2lvbjogMS4wLFxyXG4gICAgdHlwZTogJ0dlb21ldHJ5JyxcclxuICAgIGdlbmVyYXRvcjogJ3V0aWwudHJhbnNmZXJhYmxlLnRvT2JqZWN0J1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudHJhbnNmZXJhYmxlXHJcbiAqL1xyXG52YXIgdHJhbnNmZXJhYmxlVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBnZW9tZXRyeSB0byBhIG9iamVjdCBjb250YWluaW5nIHRyYW5zZmVyYWJsZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tZXRyeSBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBzaGFsbG93IHdoZXRoZXIgc2hhbGxvdyBjb3B5XHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGRhdGEgOiBkYXRhLCBidWZmZXJzIDogYnVmZmVycyB9LCBidWZmZXJzIGlzIHRoZSB0cmFuc2ZlcmFibGUgbGlzdFxyXG4gICAgICovXHJcbiAgICB0b09iamVjdCA6IGZ1bmN0aW9uIChnZW9tZXRyeSwgc2hhbGxvdykge1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgICAgICBtZXRhZGF0YSA6IHV0aWwuZXh0ZW5kKHt9LCBNRVRBKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy90cmFuc2ZlcmFibGUgYnVmZmVyc1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcblxyXG4gICAgICAgIC8vZHluYW1pY1xyXG4gICAgICAgIGRhdGEuZHluYW1pYyA9IGdlb21ldHJ5LmR5bmFtaWM7XHJcblxyXG4gICAgICAgIC8vYm91bmRpbmcgYm94XHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIGRhdGEuYm91bmRpbmdCb3ggPSB7XHJcbiAgICAgICAgICAgICAgICBtaW4gOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4udG9BcnJheSgpLFxyXG4gICAgICAgICAgICAgICAgbWF4IDogZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnRvQXJyYXkoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9pbmRpY2VzXHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmluZGljZXMgJiYgZ2VvbWV0cnkuaW5kaWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRhdGEuaW5kaWNlcyA9IGNvcHlJZk5lY2Vzc2FyeShnZW9tZXRyeS5pbmRpY2VzLCBzaGFsbG93KTtcclxuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGRhdGEuaW5kaWNlcy5idWZmZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZGF0YS5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBnZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICAvL2lnbm9yZSBlbXB0eSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0ciAmJiBhdHRyLnZhbHVlICYmIGF0dHIudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHIgPSBkYXRhLmF0dHJpYnV0ZXNbcF0gPSBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChhdHRyLnZhbHVlLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGEgOiBkYXRhLFxyXG4gICAgICAgICAgICBidWZmZXJzIDogYnVmZmVyc1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwcm9kdWNlIGEgZ2VvbWV0cnkgZnJvbSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHRvT2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEByZXR1cm5zIHtHZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdG9HZW9tZXRyeSA6IGZ1bmN0aW9uIChvYmplY3QpIHtcclxuICAgICAgICBpZiAoIW9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdC5kYXRhICYmIG9iamVjdC5idWZmZXJzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVVdGlsLnRvR2VvbWV0cnkob2JqZWN0LmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW9iamVjdC5tZXRhZGF0YSB8fCBvYmplY3QubWV0YWRhdGEuZ2VuZXJhdG9yICE9PSBNRVRBLmdlbmVyYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1t1dGlsLnRyYW5zZmVyYWJsZS50b0dlb21ldHJ5XSB0aGUgb2JqZWN0IGlzIG5vdCBnZW5lcmF0ZWQgYnkgdXRpbC50cmFuc2ZlcmFibGUuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2Jhc2ljIG9wdGlvbnNcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgZHluYW1pYyA6IG9iamVjdC5keW5hbWljLFxyXG4gICAgICAgICAgICBpbmRpY2VzIDogb2JqZWN0LmluZGljZXNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5taW4pO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbmV3IFZlY3RvcjMoKS5zZXRBcnJheShvYmplY3QuYm91bmRpbmdCb3gubWF4KTtcclxuICAgICAgICAgICAgb3B0aW9ucy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveChtaW4sIG1heCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkob3B0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vYXR0cmlidXRlc1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gb2JqZWN0LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG9iamVjdC5hdHRyaWJ1dGVzW3BdO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1twXSA9IG5ldyBHZW9tZXRyeS5BdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnR5cGUsIGF0dHIuc2l6ZSwgYXR0ci5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gY29weUF0dHJpYnV0ZShhdHRyLCBzaGFsbG93KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWUgOiBhdHRyLm5hbWUsXHJcbiAgICAgICAgdHlwZSA6IGF0dHIudHlwZSxcclxuICAgICAgICBzaXplIDogYXR0ci5zaXplLFxyXG4gICAgICAgIHNlbWFudGljIDogYXR0ci5zZW1hbnRpYyxcclxuICAgICAgICB2YWx1ZSA6IGNvcHlJZk5lY2Vzc2FyeShhdHRyLnZhbHVlLCBzaGFsbG93KVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weUlmTmVjZXNzYXJ5KGFyciwgc2hhbGxvdykge1xyXG4gICAgaWYgKCFzaGFsbG93KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBhcnIuY29uc3RydWN0b3IoYXJyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdHJhbnNmZXJhYmxlVXRpbDtcclxuIiwiLyoqXHJcbiAqIEBuYW1lIGNsYXkudmVyc2lvblxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgJzEuMi4zJztcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkudnIuZGlzb3J0ZXIub3V0cHV0LnZlcnRleFxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueHksIDAuNSwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2Jsb2IvbWFzdGVyL3NyYy9jYXJkYm9hcmQtZGlzdG9ydGVyLmpzXHJcblxyXG4vLyBVc2Ugd2VidnIgbWF5IGhhdmUgc2NhbGUgcHJvYmxlbS5cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDBcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL3NlYXJjaD9xPVNDQUxFJnR5cGU9SXNzdWVzJnV0Zjg9JUUyJTlDJTkzXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQ3XHJcblxyXG5cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG5pbXBvcnQgb3V0cHV0RXNzbCBmcm9tICcuL291dHB1dC5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQob3V0cHV0RXNzbCk7XHJcblxyXG5mdW5jdGlvbiBsZXJwIChhLCBiLCB0KSB7XHJcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcclxufVxyXG5cclxudmFyIENhcmRib2FyZERpc3RvcnRlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLCAwLCAwLCAxXSxcclxuXHJcbiAgICAgICAgX21lc2g6IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjdWxsaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBXaHkgZGlzYWJsZSBkZXB0aE1hc2sgd2lsbCBiZSB3cm9uZ1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkudnIuZGlzb3J0ZXIub3V0cHV0LmZyYWdtZW50JylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2Zha2VDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNvdXJjZVRleHR1cmUpIHtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5tYXRlcmlhbC5zZXQoJ3RleHR1cmUnLCBzb3VyY2VUZXh0dXJlKTtcclxuXHJcbiAgICAgICAgLy8gRnVsbCBzaXplP1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHJlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzLl9tZXNoXSwgdGhpcy5fZmFrZUNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5zaGFkZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLnJlbmRlcihyZW5kZXJlci5nbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZUZyb21WUkRpc3BsYXk6IGZ1bmN0aW9uICh2ckRpc3BsYXkpIHtcclxuXHJcbiAgICAgICAgLy8gRklYTUVcclxuICAgICAgICBpZiAodnJEaXNwbGF5LmRldmljZUluZm9fKSB7XHJcbiAgICAgICAgICAgIC8vIEhhcmRjb2RlZCBtZXNoIHNpemVcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWVzaCgyMCwgMjAsIHZyRGlzcGxheS5kZXZpY2VJbmZvXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhbnQgZ2V0IHZyRGlzcGxheS5kZXZpY2VJbmZvXywgc2VlbXMgY29kZSBjaGFuZ2VkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlTWVzaDogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRldmljZUluZm8pIHtcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuX21lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xyXG4gICAgICAgIHRleGNvb3JkQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBsZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVUYW5BbmdsZXMoKTtcclxuICAgICAgICB2YXIgbm9MZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZU5vTGVuc1RhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVTY3JlZW5SZWN0KG5vTGVuc0ZydXN0dW0pO1xyXG4gICAgICAgIHZhciB2aWR4ID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG5cclxuICAgICAgICAvLyBWZXJ0aWNlc1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBpIC8gKHdpZHRoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8gKGhlaWdodCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBHcmlkIHBvaW50cyByZWd1bGFybHkgc3BhY2VkIGluIFN0cmVvU2NyZWVuLCBhbmQgYmFycmVsIGRpc3RvcnRlZCBpblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gdTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBsZXJwKGxlbnNGcnVzdHVtWzBdLCBsZW5zRnJ1c3R1bVsyXSwgdSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSBsZXJwKGxlbnNGcnVzdHVtWzNdLCBsZW5zRnJ1c3R1bVsxXSwgdik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBkZXZpY2VJbmZvLmRpc3RvcnRpb24uZGlzdG9ydEludmVyc2UoZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSB4ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB5ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdSA9IChwIC0gbm9MZW5zRnJ1c3R1bVswXSkgLyAobm9MZW5zRnJ1c3R1bVsyXSAtIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAocSAtIG5vTGVuc0ZydXN0dW1bM10pIC8gKG5vTGVuc0ZydXN0dW1bMV0gLSBub0xlbnNGcnVzdHVtWzNdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB1LHYgdG8gbWVzaCBzY3JlZW4gY29vcmRpbmF0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IGRldmljZUluZm8uZGV2aWNlLndpZHRoTWV0ZXJzIC8gZGV2aWNlSW5mby5kZXZpY2UuaGVpZ2h0TWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9yaWdpbmFsIFVuaXR5IHBsdWdpbiBtdWx0aXBsaWVkIFUgYnkgdGhlIGFzcGVjdCByYXRpb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkaWRuJ3QgbXVsdGlwbHkgZWl0aGVyIHZhbHVlIGJ5IDIsIGJ1dCB0aGF0IHNlZW1zIHRvIGdldCBpdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWxseSBjbG9zZSB0byBjb3JyZWN0IGxvb2tpbmcgZm9yIG1lLiBJIGhhdGUgdGhpcyBraW5kIG9mIFwiRG9uJ3RcclxuICAgICAgICAgICAgICAgICAgICAvLyBrbm93IHdoeSBpdCB3b3Jrc1wiIGNvZGUgdGhvdWdoLCBhbmQgd29sZCBsb3ZlIGEgbW9yZSBsb2dpY2FsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGFuYXRpb24gb2Ygd2hhdCBuZWVkcyB0byBoYXBwZW4gaGVyZS5cclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHZpZXdwb3J0LnggKyB1ICogdmlld3BvcnQud2lkdGggLSAwLjUpICogMi4wOyAvLyogYXNwZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAodmlld3BvcnQueSArIHYgKiB2aWV3cG9ydC5oZWlnaHQgLSAwLjUpICogMi4wO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwb3NbMF0gPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc1sxXSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzJdID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXZbMF0gPSBzICogMC41ICsgZSAqIDAuNTtcclxuICAgICAgICAgICAgICAgICAgICB1dlsxXSA9IHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQodmlkeCwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KHZpZHgsIHV2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHcgPSBsZW5zRnJ1c3R1bVsyXSAtIGxlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVswXSA9IC0odyArIGxlbnNGcnVzdHVtWzBdKTtcclxuICAgICAgICAgICAgbGVuc0ZydXN0dW1bMl0gPSB3IC0gbGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHcgPSBub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXTtcclxuICAgICAgICAgICAgbm9MZW5zRnJ1c3R1bVswXSA9IC0odyArIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzJdID0gdyAtIG5vTGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHZpZXdwb3J0LnggPSAxIC0gKHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbmRpY2VzXHJcbiAgICAgICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMiAqICh3aWR0aCAtIDEpICogKGhlaWdodCAtIDEpICogNik7XHJcbiAgICAgICAgdmFyIGhhbGZ3aWR0aCA9IHdpZHRoIC8gMjtcclxuICAgICAgICB2YXIgaGFsZmhlaWdodCA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG4gICAgICAgIHZhciBpaWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IDI7IGUrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRoOyBpKyssIHZpZHgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGogPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgcXVhZC4gIExvd2VyIHJpZ2h0IGFuZCB1cHBlciBsZWZ0IHF1YWRyYW50cyBoYXZlIHF1YWRzIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdHJpYW5nbGUgZGlhZ29uYWwgZmxpcHBlZCB0byBnZXQgdGhlIHZpZ25ldHRlIHRvIGludGVycG9sYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdGx5LlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoaSA8PSBoYWxmd2lkdGgpID09IChqIDw9IGhhbGZoZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgbG93ZXIgbGVmdCB0byB1cHBlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuaW5kaWNlcyA9IGluZGljZXM7XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYXJkYm9hcmREaXN0b3J0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgdG1wUHJvamVjdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG52YXIgU3RlcmVvQ2FtZXJhID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgYXNwZWN0OiAwLjUsXHJcblxyXG4gICAgICAgIF9sZWZ0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9yaWdodENhbWVyYTogbmV3IENhbWVyYSgpLFxyXG5cclxuICAgICAgICBfZXllTGVmdDogbmV3IE1hdHJpeDQoKSxcclxuICAgICAgICBfZXllUmlnaHQ6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIF9mcmFtZURhdGE6IG51bGxcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVGcm9tQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhLCBmb2N1cywgem9vbSwgZXllU2VwKSB7XHJcbiAgICAgICAgaWYgKGNhbWVyYS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvY3VzID0gZm9jdXMgPT0gbnVsbCA/IDEwIDogZm9jdXM7XHJcbiAgICAgICAgem9vbSA9IHpvb20gPT0gbnVsbCA/IDEgOiB6b29tO1xyXG4gICAgICAgIGV5ZVNlcCA9IGV5ZVNlcCA9PSBudWxsID8gMC4wNjQgOiBleWVTZXA7XHJcblxyXG4gICAgICAgIHZhciBmb3YgPSBjYW1lcmEuZm92O1xyXG4gICAgICAgIHZhciBhc3BlY3QgPSBjYW1lcmEuYXNwZWN0ICogdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgdmFyIG5lYXIgPSBjYW1lcmEubmVhcjtcclxuXHJcbiAgICAgICAgLy8gT2ZmLWF4aXMgc3RlcmVvc2NvcGljIGVmZmVjdCBiYXNlZCBvblxyXG4gICAgICAgIC8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9zdGVyZW9ncmFwaGljcy9zdGVyZW9yZW5kZXIvXHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdmFyIGV5ZVNlcCA9IGV5ZVNlcCAvIDI7XHJcbiAgICAgICAgdmFyIGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcCAqIG5lYXIgLyBmb2N1cztcclxuICAgICAgICB2YXIgeW1heCA9IChuZWFyICogTWF0aC50YW4oTWF0aC5QSSAvIDE4MCAqIGZvdiAqIDAuNSApICkgLyB6b29tO1xyXG4gICAgICAgIHZhciB4bWluLCB4bWF4O1xyXG5cclxuICAgICAgICAvLyB0cmFuc2xhdGUgeE9mZnNldFxyXG4gICAgICAgIHRoaXMuX2V5ZUxlZnQuYXJyYXlbMTJdID0gLSBleWVTZXA7XHJcbiAgICAgICAgdGhpcy5fZXllUmlnaHQuYXJyYXlbMTJdID0gZXllU2VwO1xyXG5cclxuICAgICAgICAvLyBmb3IgbGVmdCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRtcFByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyBmb3IgcmlnaHQgZXllXHJcbiAgICAgICAgeG1pbiA9IC0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVswXSA9IDIgKiBuZWFyIC8gKHhtYXggLSB4bWluKTtcclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzhdID0gKHhtYXggKyB4bWluICkgLyAoeG1heCAtIHhtaW4pO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllTGVmdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtXHJcbiAgICAgICAgICAgIC5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLm11bHRpcGx5KHRoaXMuX2V5ZVJpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSwgcGFyZW50Tm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIFZSRnJhbWVEYXRhID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZnJhbWVEYXRhID0gdGhpcy5fZnJhbWVEYXRhIHx8ICh0aGlzLl9mcmFtZURhdGEgPSBuZXcgVlJGcmFtZURhdGEoKSk7XHJcbiAgICAgICAgdnJEaXNwbGF5LmdldEZyYW1lRGF0YShmcmFtZURhdGEpO1xyXG4gICAgICAgIHZhciBsZWZ0Q2FtZXJhID0gdGhpcy5fbGVmdENhbWVyYTtcclxuICAgICAgICB2YXIgcmlnaHRDYW1lcmEgPSB0aGlzLl9yaWdodENhbWVyYTtcclxuXHJcbiAgICAgICAgbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS52aWV3TWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5zZXRWaWV3TWF0cml4KGxlZnRDYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuc2V0Vmlld01hdHJpeChyaWdodENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgdHJhbnNmb3JtIGlzIG5vdCB1cGRhdGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGxlZnRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0ubXVsdGlwbHlMZWZ0KHBhcmVudE5vZGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGVmdENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRSaWdodENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yaWdodENhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGVyZW9DYW1lcmE7XHJcbiIsIi8qKiBAbmFtZXNwYWNlIGNsYXkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5tYXRoICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYXN5bmMgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jYW1lcmEgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb21wb3NpdG9yICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuY29yZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lmdlb21ldHJ5ICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuaGVscGVyICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkubGlnaHQgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5sb2FkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5wYXJ0aWNsZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBsdWdpbiAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnByZVBhc3MgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS50ZXh0dXJlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkudXRpbCAqL1xyXG5cclxuaW1wb3J0IEFuaW1hdG9yJDAgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5pbXBvcnQgQmxlbmQxRENsaXAkMSBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDFEQ2xpcCc7XHJcbmltcG9ydCBCbGVuZDJEQ2xpcCQyIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMkRDbGlwJztcclxuaW1wb3J0IENsaXAkMyBmcm9tICcuL2FuaW1hdGlvbi9DbGlwJztcclxuaW1wb3J0IGVhc2luZyQ0IGZyb20gJy4vYW5pbWF0aW9uL2Vhc2luZyc7XHJcbmltcG9ydCBTYW1wbGVyVHJhY2skNSBmcm9tICcuL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5pbXBvcnQgVGltZWxpbmUkNiBmcm9tICcuL2FuaW1hdGlvbi9UaW1lbGluZSc7XHJcbmltcG9ydCBUcmFja0NsaXAkNyBmcm9tICcuL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgYXBwbGljYXRpb24kOCBmcm9tICcuL2FwcGxpY2F0aW9uJztcclxuaW1wb3J0IFRhc2skOSBmcm9tICcuL2FzeW5jL1Rhc2snO1xyXG5pbXBvcnQgVGFza0dyb3VwJDEwIGZyb20gJy4vYXN5bmMvVGFza0dyb3VwJztcclxuaW1wb3J0IENhbWVyYSQxMSBmcm9tICcuL0NhbWVyYSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWMkMTIgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlJDEzIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IENvbXBvc2l0b3IkMTQgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUkMTUgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IkMTYgZnJvbSAnLi9jb21wb3NpdG9yL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgRmlsdGVyTm9kZSQxNyBmcm9tICcuL2NvbXBvc2l0b3IvRmlsdGVyTm9kZSc7XHJcbmltcG9ydCBHcmFwaCQxOCBmcm9tICcuL2NvbXBvc2l0b3IvR3JhcGgnO1xyXG5pbXBvcnQgUGFzcyQxOSBmcm9tICcuL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBTY2VuZU5vZGUkMjAgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlTm9kZSQyMSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wkMjIgZnJvbSAnLi9jb21wb3NpdG9yL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEJhc2UkMjMgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgQ2FjaGUkMjQgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IGNvbG9yJDI1IGZyb20gJy4vY29yZS9jb2xvcic7XHJcbmltcG9ydCBnbGVudW0kMjYgZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBHTEluZm8kMjcgZnJvbSAnLi9jb3JlL0dMSW5mbyc7XHJcbmltcG9ydCBMaW5rZWRMaXN0JDI4IGZyb20gJy4vY29yZS9MaW5rZWRMaXN0JztcclxuaW1wb3J0IExSVSQyOSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IGV4dGVuZCQzMCBmcm9tICcuL2NvcmUvbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyJDMxIGZyb20gJy4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCByZXF1ZXN0JDMyIGZyb20gJy4vY29yZS9yZXF1ZXN0JztcclxuaW1wb3J0IHV0aWwkMzMgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yJDM0IGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQzNSBmcm9tICcuL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgR0J1ZmZlciQzNiBmcm9tICcuL2RlZmVycmVkL0dCdWZmZXInO1xyXG5pbXBvcnQgUmVuZGVyZXIkMzcgZnJvbSAnLi9kZWZlcnJlZC9SZW5kZXJlcic7XHJcbmltcG9ydCBnbG1hdHJpeCQzOCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciQzOSBmcm9tICcuL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IEdlb21ldHJ5JDQwIGZyb20gJy4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQ29uZSQ0MSBmcm9tICcuL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3ViZSQ0MiBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXIkNDMgZnJvbSAnLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBQYXJhbWV0cmljU3VyZmFjZSQ0NCBmcm9tICcuL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlJztcclxuaW1wb3J0IFBsYW5lJDQ1IGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU3BoZXJlJDQ2IGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IEdlb21ldHJ5QmFzZSQ0NyBmcm9tICcuL0dlb21ldHJ5QmFzZSc7XHJcbmltcG9ydCBKb2ludCQ0OCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IExpZ2h0JDQ5IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQW1iaWVudCQ1MCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXAkNTEgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0gkNTIgZnJvbSAnLi9saWdodC9BbWJpZW50U0gnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWwkNTMgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludCQ1NCBmcm9tICcuL2xpZ2h0L1BvaW50JztcclxuaW1wb3J0IFNwaGVyZSQ1NSBmcm9tICcuL2xpZ2h0L1NwaGVyZSc7XHJcbmltcG9ydCBTcG90JDU2IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBUdWJlJDU3IGZyb20gJy4vbGlnaHQvVHViZSc7XHJcbmltcG9ydCBGWCQ1OCBmcm9tICcuL2xvYWRlci9GWCc7XHJcbmltcG9ydCBHTFRGJDU5IGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTWF0ZXJpYWwkNjAgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCQ2MSBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSQ2MiBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBNYXRyaXgyJDYzIGZyb20gJy4vbWF0aC9NYXRyaXgyJztcclxuaW1wb3J0IE1hdHJpeDJkJDY0IGZyb20gJy4vbWF0aC9NYXRyaXgyZCc7XHJcbmltcG9ydCBNYXRyaXgzJDY1IGZyb20gJy4vbWF0aC9NYXRyaXgzJztcclxuaW1wb3J0IE1hdHJpeDQkNjYgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUGxhbmUkNjcgZnJvbSAnLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFF1YXRlcm5pb24kNjggZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgUmF5JDY5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5pbXBvcnQgdXRpbCQ3MCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCBWYWx1ZSQ3MSBmcm9tICcuL21hdGgvVmFsdWUnO1xyXG5pbXBvcnQgVmVjdG9yMiQ3MiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzJDczIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjQkNzQgZnJvbSAnLi9tYXRoL1ZlY3RvcjQnO1xyXG5pbXBvcnQgTWVzaCQ3NSBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTm9kZSQ3NiBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRW1pdHRlciQ3NyBmcm9tICcuL3BhcnRpY2xlL0VtaXR0ZXInO1xyXG5pbXBvcnQgRmllbGQkNzggZnJvbSAnLi9wYXJ0aWNsZS9GaWVsZCc7XHJcbmltcG9ydCBGb3JjZUZpZWxkJDc5IGZyb20gJy4vcGFydGljbGUvRm9yY2VGaWVsZCc7XHJcbmltcG9ydCBQYXJ0aWNsZSQ4MCBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlJztcclxuaW1wb3J0IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MSBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBQaXhlbFBpY2tpbmckODIgZnJvbSAnLi9waWNraW5nL1BpeGVsUGlja2luZyc7XHJcbmltcG9ydCBSYXlQaWNraW5nJDgzIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IEZyZWVDb250cm9sJDg0IGZyb20gJy4vcGx1Z2luL0ZyZWVDb250cm9sJztcclxuaW1wb3J0IEdhbWVwYWRDb250cm9sJDg1IGZyb20gJy4vcGx1Z2luL0dhbWVwYWRDb250cm9sJztcclxuaW1wb3J0IEdlc3R1cmVNZ3IkODYgZnJvbSAnLi9wbHVnaW4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCBJbmZpbml0ZVBsYW5lJDg3IGZyb20gJy4vcGx1Z2luL0luZmluaXRlUGxhbmUnO1xyXG5pbXBvcnQgT3JiaXRDb250cm9sJDg4IGZyb20gJy4vcGx1Z2luL09yYml0Q29udHJvbCc7XHJcbmltcG9ydCBTa3lib3gkODkgZnJvbSAnLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUkOTAgZnJvbSAnLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcCQ5MSBmcm9tICcuL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2hhZG93TWFwJDkyIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSQ5MyBmcm9tICcuL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgUmVuZGVyZXIkOTQgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSQ5NSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFNoYWRlciQ5NiBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBsaWJyYXJ5JDk3IGZyb20gJy4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuaW1wb3J0IGxpZ2h0JDk5IGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5pbXBvcnQgU2tlbGV0b24kMTAwIGZyb20gJy4vU2tlbGV0b24nO1xyXG5pbXBvcnQgU3RhbmRhcmRNYXRlcmlhbCQxMDEgZnJvbSAnLi9TdGFuZGFyZE1hdGVyaWFsJztcclxuaW1wb3J0IFN0YXRpY0dlb21ldHJ5JDEwMiBmcm9tICcuL1N0YXRpY0dlb21ldHJ5JztcclxuaW1wb3J0IFRleHR1cmUkMTAzIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQkMTA0IGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlJDEwNSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuaW1wb3J0IFRpbWVsaW5lJDEwNiBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IGN1YmVtYXAkMTA3IGZyb20gJy4vdXRpbC9jdWJlbWFwJztcclxuaW1wb3J0IGRkcyQxMDggZnJvbSAnLi91dGlsL2Rkcyc7XHJcbmltcG9ydCBkZWxhdW5heSQxMDkgZnJvbSAnLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IGhkciQxMTAgZnJvbSAnLi91dGlsL2hkcic7XHJcbmltcG9ydCBtZXNoJDExMSBmcm9tICcuL3V0aWwvbWVzaCc7XHJcbmltcG9ydCBzaCQxMTIgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmUkMTEzIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHRyYW5zZmVyYWJsZSQxMTQgZnJvbSAnLi91dGlsL3RyYW5zZmVyYWJsZSc7XHJcbmltcG9ydCB2ZXJzaW9uJDExNSBmcm9tICcuL3ZlcnNpb24nO1xyXG5pbXBvcnQgQ2FyZGJvYXJkRGlzdG9ydGVyJDExNiBmcm9tICcuL3ZyL0NhcmRib2FyZERpc3RvcnRlcic7XHJcbmltcG9ydCBTdGVyZW9DYW1lcmEkMTE3IGZyb20gJy4vdnIvU3RlcmVvQ2FtZXJhJztcclxuXHJcblxyXG52YXIgYW5pbWF0aW9uID0ge1xyXG4gICAgQW5pbWF0b3IgOiBBbmltYXRvciQwLFxyXG4gICAgQmxlbmQxRENsaXAgOiBCbGVuZDFEQ2xpcCQxLFxyXG4gICAgQmxlbmQyRENsaXAgOiBCbGVuZDJEQ2xpcCQyLFxyXG4gICAgQ2xpcCA6IENsaXAkMyxcclxuICAgIGVhc2luZyA6IGVhc2luZyQ0LFxyXG4gICAgU2FtcGxlclRyYWNrIDogU2FtcGxlclRyYWNrJDUsXHJcbiAgICBUaW1lbGluZSA6IFRpbWVsaW5lJDYsXHJcbiAgICBUcmFja0NsaXAgOiBUcmFja0NsaXAkN1xyXG59O1xyXG5leHBvcnQgeyBhbmltYXRpb24gfTtcclxuXHJcbmV4cG9ydCB7IGFwcGxpY2F0aW9uJDggYXMgYXBwbGljYXRpb24gfTtcclxuXHJcbnZhciBhc3luYyA9IHtcclxuICAgIFRhc2sgOiBUYXNrJDksXHJcbiAgICBUYXNrR3JvdXAgOiBUYXNrR3JvdXAkMTBcclxufTtcclxuZXhwb3J0IHsgYXN5bmMgfTtcclxuXHJcbmV4cG9ydCB7IENhbWVyYSQxMSBhcyBDYW1lcmEgfTtcclxuXHJcbnZhciBjYW1lcmEgPSB7XHJcbiAgICBPcnRob2dyYXBoaWMgOiBPcnRob2dyYXBoaWMkMTIsXHJcbiAgICBQZXJzcGVjdGl2ZSA6IFBlcnNwZWN0aXZlJDEzXHJcbn07XHJcbmV4cG9ydCB7IGNhbWVyYSB9O1xyXG5cclxuXHJcbnZhciBjb21wb3NpdG9yID0ge1xyXG4gICAgQ29tcG9zaXRvciA6IENvbXBvc2l0b3IkMTQsXHJcbiAgICBDb21wb3NpdG9yTm9kZSA6IENvbXBvc2l0b3JOb2RlJDE1LFxyXG4gICAgY3JlYXRlQ29tcG9zaXRvciA6IGNyZWF0ZUNvbXBvc2l0b3IkMTYsXHJcbiAgICBGaWx0ZXJOb2RlIDogRmlsdGVyTm9kZSQxNyxcclxuICAgIEdyYXBoIDogR3JhcGgkMTgsXHJcbiAgICBQYXNzIDogUGFzcyQxOSxcclxuICAgIFNjZW5lTm9kZSA6IFNjZW5lTm9kZSQyMCxcclxuICAgIFRleHR1cmVOb2RlIDogVGV4dHVyZU5vZGUkMjEsXHJcbiAgICBUZXh0dXJlUG9vbCA6IFRleHR1cmVQb29sJDIyXHJcbn07XHJcbmV4cG9ydCB7IGNvbXBvc2l0b3IgfTtcclxuXHJcblxyXG52YXIgY29yZSA9IHtcclxuICAgIEJhc2UgOiBCYXNlJDIzLFxyXG4gICAgQ2FjaGUgOiBDYWNoZSQyNCxcclxuICAgIGNvbG9yIDogY29sb3IkMjUsXHJcbiAgICBnbGVudW0gOiBnbGVudW0kMjYsXHJcbiAgICBHTEluZm8gOiBHTEluZm8kMjcsXHJcbiAgICBMaW5rZWRMaXN0IDogTGlua2VkTGlzdCQyOCxcclxuICAgIExSVSA6IExSVSQyOSxcclxuICAgIG1peGluIDoge1xyXG4gICAgICAgIGV4dGVuZCA6IGV4dGVuZCQzMCxcclxuICAgICAgICBub3RpZmllciA6IG5vdGlmaWVyJDMxXHJcbiAgICB9LFxyXG4gICAgcmVxdWVzdCA6IHJlcXVlc3QkMzIsXHJcbiAgICB1dGlsIDogdXRpbCQzMyxcclxuICAgIHZlbmRvciA6IHZlbmRvciQzNFxyXG59O1xyXG5leHBvcnQgeyBjb3JlIH07XHJcblxyXG5leHBvcnQgeyBjcmVhdGVDb21wb3NpdG9yJDM1IGFzIGNyZWF0ZUNvbXBvc2l0b3IgfTtcclxuXHJcbnZhciBkZWZlcnJlZCA9IHtcclxuICAgIEdCdWZmZXIgOiBHQnVmZmVyJDM2LFxyXG4gICAgUmVuZGVyZXIgOiBSZW5kZXJlciQzN1xyXG59O1xyXG5leHBvcnQgeyBkZWZlcnJlZCB9O1xyXG5cclxuXHJcbnZhciBkZXAgPSB7XHJcbiAgICBnbG1hdHJpeCA6IGdsbWF0cml4JDM4XHJcbn07XHJcbmV4cG9ydCB7IGRlcCB9O1xyXG5cclxuZXhwb3J0IHsgRnJhbWVCdWZmZXIkMzkgYXMgRnJhbWVCdWZmZXIgfTtcclxuZXhwb3J0IHsgR2VvbWV0cnkkNDAgYXMgR2VvbWV0cnkgfTtcclxuXHJcbnZhciBnZW9tZXRyeSA9IHtcclxuICAgIENvbmUgOiBDb25lJDQxLFxyXG4gICAgQ3ViZSA6IEN1YmUkNDIsXHJcbiAgICBDeWxpbmRlciA6IEN5bGluZGVyJDQzLFxyXG4gICAgUGFyYW1ldHJpY1N1cmZhY2UgOiBQYXJhbWV0cmljU3VyZmFjZSQ0NCxcclxuICAgIFBsYW5lIDogUGxhbmUkNDUsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNDZcclxufTtcclxuZXhwb3J0IHsgZ2VvbWV0cnkgfTtcclxuXHJcbmV4cG9ydCB7IEdlb21ldHJ5QmFzZSQ0NyBhcyBHZW9tZXRyeUJhc2UgfTtcclxuZXhwb3J0IHsgSm9pbnQkNDggYXMgSm9pbnQgfTtcclxuZXhwb3J0IHsgTGlnaHQkNDkgYXMgTGlnaHQgfTtcclxuXHJcbnZhciBsaWdodCA9IHtcclxuICAgIEFtYmllbnQgOiBBbWJpZW50JDUwLFxyXG4gICAgQW1iaWVudEN1YmVtYXAgOiBBbWJpZW50Q3ViZW1hcCQ1MSxcclxuICAgIEFtYmllbnRTSCA6IEFtYmllbnRTSCQ1MixcclxuICAgIERpcmVjdGlvbmFsIDogRGlyZWN0aW9uYWwkNTMsXHJcbiAgICBQb2ludCA6IFBvaW50JDU0LFxyXG4gICAgU3BoZXJlIDogU3BoZXJlJDU1LFxyXG4gICAgU3BvdCA6IFNwb3QkNTYsXHJcbiAgICBUdWJlIDogVHViZSQ1N1xyXG59O1xyXG5leHBvcnQgeyBsaWdodCB9O1xyXG5cclxuXHJcbnZhciBsb2FkZXIgPSB7XHJcbiAgICBGWCA6IEZYJDU4LFxyXG4gICAgR0xURiA6IEdMVEYkNTlcclxufTtcclxuZXhwb3J0IHsgbG9hZGVyIH07XHJcblxyXG5leHBvcnQgeyBNYXRlcmlhbCQ2MCBhcyBNYXRlcmlhbCB9O1xyXG5cclxudmFyIG1hdGggPSB7XHJcbiAgICBCb3VuZGluZ0JveCA6IEJvdW5kaW5nQm94JDYxLFxyXG4gICAgRnJ1c3R1bSA6IEZydXN0dW0kNjIsXHJcbiAgICBNYXRyaXgyIDogTWF0cml4MiQ2MyxcclxuICAgIE1hdHJpeDJkIDogTWF0cml4MmQkNjQsXHJcbiAgICBNYXRyaXgzIDogTWF0cml4MyQ2NSxcclxuICAgIE1hdHJpeDQgOiBNYXRyaXg0JDY2LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ2NyxcclxuICAgIFF1YXRlcm5pb24gOiBRdWF0ZXJuaW9uJDY4LFxyXG4gICAgUmF5IDogUmF5JDY5LFxyXG4gICAgdXRpbCA6IHV0aWwkNzAsXHJcbiAgICBWYWx1ZSA6IFZhbHVlJDcxLFxyXG4gICAgVmVjdG9yMiA6IFZlY3RvcjIkNzIsXHJcbiAgICBWZWN0b3IzIDogVmVjdG9yMyQ3MyxcclxuICAgIFZlY3RvcjQgOiBWZWN0b3I0JDc0XHJcbn07XHJcbmV4cG9ydCB7IG1hdGggfTtcclxuZXhwb3J0IHsgQm91bmRpbmdCb3gkNjEgYXMgQm91bmRpbmdCb3ggfTtcclxuZXhwb3J0IHsgRnJ1c3R1bSQ2MiBhcyBGcnVzdHVtIH07XHJcbmV4cG9ydCB7IE1hdHJpeDIkNjMgYXMgTWF0cml4MiB9O1xyXG5leHBvcnQgeyBNYXRyaXgyZCQ2NCBhcyBNYXRyaXgyZCB9O1xyXG5leHBvcnQgeyBNYXRyaXgzJDY1IGFzIE1hdHJpeDMgfTtcclxuZXhwb3J0IHsgTWF0cml4NCQ2NiBhcyBNYXRyaXg0IH07XHJcbmV4cG9ydCB7IFBsYW5lJDY3IGFzIFBsYW5lIH07XHJcbmV4cG9ydCB7IFF1YXRlcm5pb24kNjggYXMgUXVhdGVybmlvbiB9O1xyXG5leHBvcnQgeyBSYXkkNjkgYXMgUmF5IH07XHJcbmV4cG9ydCB7IFZhbHVlJDcxIGFzIFZhbHVlIH07XHJcbmV4cG9ydCB7IFZlY3RvcjIkNzIgYXMgVmVjdG9yMiB9O1xyXG5leHBvcnQgeyBWZWN0b3IzJDczIGFzIFZlY3RvcjMgfTtcclxuZXhwb3J0IHsgVmVjdG9yNCQ3NCBhcyBWZWN0b3I0IH07XHJcblxyXG5leHBvcnQgeyBNZXNoJDc1IGFzIE1lc2ggfTtcclxuZXhwb3J0IHsgTm9kZSQ3NiBhcyBOb2RlIH07XHJcblxyXG52YXIgcGFydGljbGUgPSB7XHJcbiAgICBFbWl0dGVyIDogRW1pdHRlciQ3NyxcclxuICAgIEZpZWxkIDogRmllbGQkNzgsXHJcbiAgICBGb3JjZUZpZWxkIDogRm9yY2VGaWVsZCQ3OSxcclxuICAgIFBhcnRpY2xlIDogUGFydGljbGUkODAsXHJcbiAgICBQYXJ0aWNsZVJlbmRlcmFibGUgOiBQYXJ0aWNsZVJlbmRlcmFibGUkODFcclxufTtcclxuZXhwb3J0IHsgcGFydGljbGUgfTtcclxuXHJcblxyXG52YXIgcGlja2luZyA9IHtcclxuICAgIFBpeGVsUGlja2luZyA6IFBpeGVsUGlja2luZyQ4MixcclxuICAgIFJheVBpY2tpbmcgOiBSYXlQaWNraW5nJDgzXHJcbn07XHJcbmV4cG9ydCB7IHBpY2tpbmcgfTtcclxuXHJcblxyXG52YXIgcGx1Z2luID0ge1xyXG4gICAgRnJlZUNvbnRyb2wgOiBGcmVlQ29udHJvbCQ4NCxcclxuICAgIEdhbWVwYWRDb250cm9sIDogR2FtZXBhZENvbnRyb2wkODUsXHJcbiAgICBHZXN0dXJlTWdyIDogR2VzdHVyZU1nciQ4NixcclxuICAgIEluZmluaXRlUGxhbmUgOiBJbmZpbml0ZVBsYW5lJDg3LFxyXG4gICAgT3JiaXRDb250cm9sIDogT3JiaXRDb250cm9sJDg4LFxyXG4gICAgU2t5Ym94IDogU2t5Ym94JDg5LFxyXG4gICAgU2t5ZG9tZSA6IFNreWRvbWUkOTBcclxufTtcclxuZXhwb3J0IHsgcGx1Z2luIH07XHJcblxyXG5cclxudmFyIHByZVBhc3MgPSB7XHJcbiAgICBFbnZpcm9ubWVudE1hcCA6IEVudmlyb25tZW50TWFwJDkxLFxyXG4gICAgU2hhZG93TWFwIDogU2hhZG93TWFwJDkyXHJcbn07XHJcbmV4cG9ydCB7IHByZVBhc3MgfTtcclxuXHJcbmV4cG9ydCB7IFJlbmRlcmFibGUkOTMgYXMgUmVuZGVyYWJsZSB9O1xyXG5leHBvcnQgeyBSZW5kZXJlciQ5NCBhcyBSZW5kZXJlciB9O1xyXG5leHBvcnQgeyBTY2VuZSQ5NSBhcyBTY2VuZSB9O1xyXG5leHBvcnQgeyBTaGFkZXIkOTYgYXMgU2hhZGVyIH07XHJcblxyXG52YXIgc2hhZGVyID0ge1xyXG4gICAgbGlicmFyeSA6IGxpYnJhcnkkOTcsXHJcbiAgICByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIDogcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCxcclxuICAgIHNvdXJjZSA6IHtcclxuICAgIGhlYWRlciA6IHtcclxuICAgICAgICBsaWdodCA6IGxpZ2h0JDk5XHJcbiAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB7IHNoYWRlciB9O1xyXG5cclxuZXhwb3J0IHsgU2tlbGV0b24kMTAwIGFzIFNrZWxldG9uIH07XHJcbmV4cG9ydCB7IFN0YW5kYXJkTWF0ZXJpYWwkMTAxIGFzIFN0YW5kYXJkTWF0ZXJpYWwgfTtcclxuZXhwb3J0IHsgU3RhdGljR2VvbWV0cnkkMTAyIGFzIFN0YXRpY0dlb21ldHJ5IH07XHJcbmV4cG9ydCB7IFRleHR1cmUkMTAzIGFzIFRleHR1cmUgfTtcclxuZXhwb3J0IHsgVGV4dHVyZTJEJDEwNCBhcyBUZXh0dXJlMkQgfTtcclxuZXhwb3J0IHsgVGV4dHVyZUN1YmUkMTA1IGFzIFRleHR1cmVDdWJlIH07XHJcbmV4cG9ydCB7IFRpbWVsaW5lJDEwNiBhcyBUaW1lbGluZSB9O1xyXG5cclxudmFyIHV0aWwgPSB7XHJcbiAgICBjdWJlbWFwIDogY3ViZW1hcCQxMDcsXHJcbiAgICBkZHMgOiBkZHMkMTA4LFxyXG4gICAgZGVsYXVuYXkgOiBkZWxhdW5heSQxMDksXHJcbiAgICBoZHIgOiBoZHIkMTEwLFxyXG4gICAgbWVzaCA6IG1lc2gkMTExLFxyXG4gICAgc2ggOiBzaCQxMTIsXHJcbiAgICB0ZXh0dXJlIDogdGV4dHVyZSQxMTMsXHJcbiAgICB0cmFuc2ZlcmFibGUgOiB0cmFuc2ZlcmFibGUkMTE0XHJcbn07XHJcbmV4cG9ydCB7IHV0aWwgfTtcclxuXHJcbmV4cG9ydCB7IHZlcnNpb24kMTE1IGFzIHZlcnNpb24gfTtcclxuXHJcbnZhciB2ciA9IHtcclxuICAgIENhcmRib2FyZERpc3RvcnRlciA6IENhcmRib2FyZERpc3RvcnRlciQxMTYsXHJcbiAgICBTdGVyZW9DYW1lcmEgOiBTdGVyZW9DYW1lcmEkMTE3XHJcbn07XHJcbmV4cG9ydCB7IHZyIH07XHJcbjtcclxuIl0sIm5hbWVzIjpbImVhc2luZyIsIkVhc2luZyIsImVhc2luZ0Z1bmNzIiwiR0xNQVRfUkFORE9NIiwidXRpbCIsIm5vdGlmaWVyTWl4aW4iLCJMUlUiLCJwYXJzZUNvbG9yIiwiZ2V0RGVmaW5lQ29kZSIsInByZXpFc3NsIiwibm9vcCIsInByb3RvIiwiZGVmaW5lUHJvcGVydHkiLCJsaWdodFNoYWRlciIsIlBsYW5lIiwidmVjM1NldCIsInZlYzNDb3B5IiwiRVBTSUxPTiIsInByb2dyYW1LZXlDYWNoZSIsImdldFByb2dyYW1LZXkiLCJMUlVDYWNoZSIsIkF0dHJpYnV0ZSIsIkN1YmUiLCJTcGhlcmUiLCJQYXJhbWV0cmljU3VyZmFjZSIsImlzUG93ZXJPZlR3byIsIlBlcnNwZWN0aXZlIiwiT3J0aG9ncmFwaGljIiwidXRpbEVzc2wiLCJzaGFkZXJMaWJyYXJ5IiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJPcnRob2dyYXBoaWNDYW1lcmEiLCJjYW1lcmEiLCJPcnRob0NhbWVyYSIsIlNreWJveCIsIkN1YmVHZW9tZXRyeSIsInRhcmdldHMiLCJyZXQiLCJoZHIiLCJkZHMiLCJTa3lkb21lIiwiQ3ViZUdlbyIsIlNwaGVyZUdlbyIsIlBsYW5lR2VvIiwiUGFyYW1ldHJpY1N1cmZhY2VHZW8iLCJzaFV0aWwiLCJHcmFwaE5vZGUiLCJTY2VuZU5vZGUiLCJUZXh0dXJlTm9kZSIsIkZpbHRlck5vZGUiLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIiwiQ29tcG9TY2VuZU5vZGUiLCJDb21wb1RleHR1cmVOb2RlIiwiQ29tcG9GaWx0ZXJOb2RlIiwiQ29uZSIsIkN5bGluZGVyIiwiQ29uZUdlb21ldHJ5IiwiQ29uZUdlbyIsIkN5bGluZGVyR2VvIiwiRnVsbFF1YWRQYXNzIiwib3V0cHV0RXNzbCIsIkJhc2UiLCJDYW1lcmEiLCJBbmltYXRvciQwIiwiQmxlbmQxRENsaXAkMSIsIkJsZW5kMkRDbGlwJDIiLCJDbGlwJDMiLCJlYXNpbmckNCIsIlNhbXBsZXJUcmFjayQ1IiwiVGltZWxpbmUkNiIsIlRyYWNrQ2xpcCQ3IiwiVGFzayQ5IiwiVGFza0dyb3VwJDEwIiwiT3J0aG9ncmFwaGljJDEyIiwiUGVyc3BlY3RpdmUkMTMiLCJDb21wb3NpdG9yJDE0IiwiQ29tcG9zaXRvck5vZGUkMTUiLCJjcmVhdGVDb21wb3NpdG9yJDE2IiwiRmlsdGVyTm9kZSQxNyIsIkdyYXBoJDE4IiwiUGFzcyQxOSIsIlNjZW5lTm9kZSQyMCIsIlRleHR1cmVOb2RlJDIxIiwiVGV4dHVyZVBvb2wkMjIiLCJCYXNlJDIzIiwiQ2FjaGUkMjQiLCJjb2xvciQyNSIsImdsZW51bSQyNiIsIkdMSW5mbyQyNyIsIkxpbmtlZExpc3QkMjgiLCJMUlUkMjkiLCJleHRlbmQkMzAiLCJub3RpZmllciQzMSIsInJlcXVlc3QkMzIiLCJ1dGlsJDMzIiwidmVuZG9yJDM0IiwiR0J1ZmZlciQzNiIsIlJlbmRlcmVyJDM3IiwiZ2xtYXRyaXgkMzgiLCJDb25lJDQxIiwiQ3ViZSQ0MiIsIkN5bGluZGVyJDQzIiwiUGFyYW1ldHJpY1N1cmZhY2UkNDQiLCJQbGFuZSQ0NSIsIlNwaGVyZSQ0NiIsIkFtYmllbnQkNTAiLCJBbWJpZW50Q3ViZW1hcCQ1MSIsIkFtYmllbnRTSCQ1MiIsIkRpcmVjdGlvbmFsJDUzIiwiUG9pbnQkNTQiLCJTcGhlcmUkNTUiLCJTcG90JDU2IiwiVHViZSQ1NyIsIkZYJDU4IiwiR0xURiQ1OSIsIkJvdW5kaW5nQm94JDYxIiwiRnJ1c3R1bSQ2MiIsIk1hdHJpeDIkNjMiLCJNYXRyaXgyZCQ2NCIsIk1hdHJpeDMkNjUiLCJNYXRyaXg0JDY2IiwiUGxhbmUkNjciLCJRdWF0ZXJuaW9uJDY4IiwiUmF5JDY5IiwidXRpbCQ3MCIsIlZhbHVlJDcxIiwiVmVjdG9yMiQ3MiIsIlZlY3RvcjMkNzMiLCJWZWN0b3I0JDc0IiwiRW1pdHRlciQ3NyIsIkZpZWxkJDc4IiwiRm9yY2VGaWVsZCQ3OSIsIlBhcnRpY2xlJDgwIiwiUGFydGljbGVSZW5kZXJhYmxlJDgxIiwiUGl4ZWxQaWNraW5nJDgyIiwiUmF5UGlja2luZyQ4MyIsIkZyZWVDb250cm9sJDg0IiwiR2FtZXBhZENvbnRyb2wkODUiLCJHZXN0dXJlTWdyJDg2IiwiSW5maW5pdGVQbGFuZSQ4NyIsIk9yYml0Q29udHJvbCQ4OCIsIlNreWJveCQ4OSIsIlNreWRvbWUkOTAiLCJFbnZpcm9ubWVudE1hcCQ5MSIsIlNoYWRvd01hcCQ5MiIsImxpYnJhcnkkOTciLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IiwibGlnaHQkOTkiLCJjdWJlbWFwJDEwNyIsImRkcyQxMDgiLCJkZWxhdW5heSQxMDkiLCJoZHIkMTEwIiwibWVzaCQxMTEiLCJzaCQxMTIiLCJ0ZXh0dXJlJDExMyIsInRyYW5zZmVyYWJsZSQxMTQiLCJDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IiwiU3RlcmVvQ2FtZXJhJDExNyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0FBS0EsSUFBSSxNQUFNLEdBQUc7Ozs7OztJQU1ULE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsQ0FBQztLQUNaOzs7Ozs7SUFNRCxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCOzs7Ozs7SUFNRCxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RCOzs7Ozs7SUFNRCxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RDOzs7Ozs7SUFNRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQjs7Ozs7O0lBTUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFF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QVEsR0FBRyxPQUFPLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUMvQjs7U0FFSTtRQUNELEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRO1lBQ3RCLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztZQUNyQixFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxH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R0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwRDtTQUNKOzs7UUFHRCxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7UUFFdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFD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QUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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RCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGFBQWEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGFBQWEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJ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SUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O0lBRXJCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUVoRCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7SUFFN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLENBQUM7Ozs7Ozs7QUFPRixXQUFXLENBQUMsU0FBUyxDQUFD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QUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Ozs7Ozs7O0FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFRdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Ozs7Ozs7OztBQVNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8sR0FBRyxDQUFDO0NBQ1osQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTs7UUFFVCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdkIsSUFBSTtRQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xELENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2hDLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDOztJQUVyQixJQUFJLENBQUMsR0FBR0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQ0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDOztJQUV4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7O0lBR3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztNQUVkLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7TUFHakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUczQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7SUFFakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUduQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMs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QUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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Q0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtRQUNULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUNoQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQzs7O0lBR3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxjQUFZLEVBQUUsQ0FBQztJQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdBLGNBQVksRUFBRSxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVB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QUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEIsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENB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QUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6RyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWxDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUUzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRWpCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMs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LENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUM5QixJQUFJLEtBQUss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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNyZ0JGOzs7QUFHQSxBQUlBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuQyxPQUFPLEdBQUcsQ0FBQztDQUNkOztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFOzs7O0lBSXJDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7OztJQUd4QyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFOUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2IsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0tBQ2I7O0lBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUksUUFBUSxFQUFFOztRQUUxQixLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDeEM7U0FDSTs7O1FBR0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNkOztJQUVELEdBQUcsQ0FBQyxDQUFD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RyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM5RCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDN0U7O0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJ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QyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdB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SUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFH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QyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FB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QUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUs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QUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFcEQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRXZELEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOztRQUVsRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOzs7SUFHaEMsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNoRixDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR3ZELElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFNUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBRzFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUduQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRXpDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7QUFNekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOzs7Ozs7Ozs7QUFTckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRXZCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDckQsTUFBTTtRQUNILEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7UUFFekQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqRDs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUN2QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7SUFFbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUU7O0lBRW5ELEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNULENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDOztJQUVULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHakQsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7OztJQUd0RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0Ms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Q0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztJQUVoRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdB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QyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMVYsQ0FBQzs7QUM3NkJGOztBQUVBLEFBYUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDSyxRQUFRLENBQUMsQ0FBQzs7QUFFM0IsQUFHQSxJQUFJLFVBQVUs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QUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7OztBQU0vQixPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFB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TSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRWYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FB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RyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLFVBQVUsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMs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QUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFOztJQUU1QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7SUFFbEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUU1QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7Ozs7OztJQU0zQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFN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OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJ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SUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTFGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXZCLE9BQU8sSUFBSSxDQUFDO1NBQ2YsQ0FBQztLQUNMLEdBQUc7Ozs7OztJQU1KLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFekIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWpCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdB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QUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O1FBR3ZEQyxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7OztRQUd0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FB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LElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7WUFHaENBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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QyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUMzQixDQUFDOztZQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0MsQ0FBQztZQUNGLE1BQU07UUFDVixLQUFLLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxHQUFHLENBQUM7YUFDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0IsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDO2dC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QUM7Z0JBQ3hCLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztnQkFFNUIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUVoQyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUc7Z0JBQ2QsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHO2dCQUNkLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdB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QyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFdkMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDdEM7O0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM5QixN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LEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O29CQUU1QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztvQkFFMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztvQkFDM0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzs7b0JBRS9CLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUVyRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FB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QUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUV0QyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3Qzs7O1FBR0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUUxQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7OztRQUdELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3QixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVEOzs7UUFHRCxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDSjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFB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Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQ2YsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFNUIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDOztJQUVuQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztJQUU1QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7SUFFYixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25HLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3BCLENBQUM7O0FDNVBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLEFBcUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9JLENBQUM7O0FDcFBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxBQVNBLGVBQWU7SUFDWCxJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJQUFJO0lBQ1YsSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxLQUFLO0lBQ1osSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJQUFJ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QUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFB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 diff --git a/dist/claygl.js b/dist/claygl.js index e0209ac49..afac091bd 100644 --- a/dist/claygl.js +++ b/dist/claygl.js @@ -1623,11 +1623,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2 Dimensional Vector - * @name vec2 - */ - var vec2 = {}; /** @@ -2114,12 +2109,6 @@ vec2.forEach = (function() { }; })(); -/** - * @constructor - * @alias clay.Vector2 - * @param {number} x - * @param {number} y - */ var Vector2 = function(x, y) { x = x || 0; @@ -2842,36 +2831,6 @@ Vector2.transformMat4 = function(out, a, m) { // 2D Blend clip of blend tree // http://docs.unity3d.com/Documentation/Manual/2DBlending.html -/** - * @typedef {Object} clay.animation.Blend2DClip.IClipInput - * @property {clay.Vector2} position - * @property {clay.animation.Clip} clip - * @property {number} offset - */ - -/** - * 2d blending node in animation blend tree. - * output clip must have blend2D method - * @constructor - * @alias clay.animation.Blend2DClip - * @extends clay.animation.Clip - * - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {object[]} [opts.inputs] - * @param {clay.Vector2} [opts.position] - * @param {clay.animation.Clip} [opts.output] - */ var Blend2DClip = function (opts) { opts = opts || {}; @@ -3026,11 +2985,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3 Dimensional Vector - * @name vec3 - */ - var vec3 = {}; /** @@ -3369,6 +3323,10 @@ vec3.normalize = function(out, a) { out[0] = a[0] * len; out[1] = a[1] * len; out[2] = a[2] * len; + }else{ + out[0] = 0; + out[1] = 0; + out[2] = 1; } return out; }; @@ -3673,11 +3631,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4 Dimensional Vector - * @name vec4 - */ - var vec4 = {}; /** @@ -4199,11 +4152,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3x3 Matrix - * @name mat3 - */ - var mat3 = {}; /** @@ -4843,6 +4791,20 @@ quat.setAxisAngle = function(out, axis, rad) { return out; }; +/** + * zh : 绕单位向量自转 + * @param out {quat} + * @param quat2 {quat} + * @param axis {vec3} + * @param rad {Number} + */ + +quat.rotateAxis = function (out,quat2,axis,rad) { + vec3.normalize(axis,axis); + quat.setAxisAngle(quat2,axis,rad); + quat.multiply(out,out,quat2); +}; + /** * Adds two quat's * @@ -4898,16 +4860,10 @@ quat.scale = vec4.scale; * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateX = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bx = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw + aw * bx; - out[1] = ay * bw + az * bx; - out[2] = az * bw - ay * bx; - out[3] = aw * bw - ax * bx; +quat.rotateX = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [1,0,0]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -4919,16 +4875,10 @@ quat.rotateX = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateY = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - by = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw - az * by; - out[1] = ay * bw + aw * by; - out[2] = az * bw + ax * by; - out[3] = aw * bw - ay * by; +quat.rotateY = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,1,0]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -4940,16 +4890,10 @@ quat.rotateY = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateZ = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bz = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw + ay * bz; - out[1] = ay * bw - ax * bz; - out[2] = az * bw + aw * bz; - out[3] = aw * bw - az * bz; +quat.rotateZ = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,0,1]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -4964,7 +4908,6 @@ quat.rotateZ = function (out, a, rad) { */ quat.calculateW = function (out, a) { var x = a[0], y = a[1], z = a[2]; - out[0] = x; out[1] = y; out[2] = z; @@ -5170,7 +5113,6 @@ quat.fromMat3 = function(out, m) { // Sampler clip is especially for the animation sampler in glTF // Use Typed Array can reduce a lot of heap memory -// lerp function with offset in large array function vec3lerp(out, a, b, t, oa, ob) { var ax = a[oa]; var ay = a[oa + 1]; @@ -6062,12 +6004,6 @@ var util$1 = { } }; -/** - * Base class of all objects - * @constructor - * @alias clay.core.Base - * @mixes clay.core.mixin.notifier - */ var Base = function () { /** * @type {number} @@ -6199,28 +6135,6 @@ vendor.removeEventListener = function (dom, type, func) { dom.removeEventListener(type, func); }; -/** - * Animation is global timeline that schedule all clips. each frame animation will set the time of clips to current and update the states of clips - * @constructor clay.Timeline - * @extends clay.core.Base - * - * @example - * var animation = new clay.Timeline(); - * var node = new clay.Node(); - * animation.animate(node.position) - * .when(1000, { - * x: 500, - * y: 500 - * }) - * .when(2000, { - * x: 100, - * y: 100 - * }) - * .when(3000, { - * z: 10 - * }) - * .start('spline'); - */ var Timeline = Base.extend(function () { return /** @lends clay.Timeline# */{ /** @@ -6416,27 +6330,6 @@ var Timeline = Base.extend(function () { // DEPRECATED -/** - * - * Animation clip that manage a collection of {@link clay.animation.SamplerTrack} - * @constructor - * @alias clay.animation.TrackClip - * - * @extends clay.animation.Clip - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {Array.} [opts.tracks] - */ var TrackClip = function (opts) { opts = opts || {}; @@ -6688,14 +6581,16 @@ function GLInfo(_gl) { }; function createExtension(name) { - var ext = _gl.getExtension(name); - if (!ext) { - ext = _gl.getExtension('MOZ_' + name); - } - if (!ext) { - ext = _gl.getExtension('WEBKIT_' + name); + if (_gl.getExtension) { + var ext = _gl.getExtension(name); + if (!ext) { + ext = _gl.getExtension('MOZ_' + name); + } + if (!ext) { + ext = _gl.getExtension('WEBKIT_' + name); + } + extensions[name] = ext; } - extensions[name] = ext; } } @@ -7377,11 +7272,6 @@ LinkedList.Entry = function (val) { this.prev = null; }; -/** - * LRU Cache - * @constructor - * @alias clay.core.LRU - */ var LRU$1 = function (maxSize) { this._list = new LinkedList(); @@ -8791,6 +8681,15 @@ var GLProgram = Base.extend({ _gl.linkProgram(program); + _gl.deleteShader(vertexShader); + _gl.deleteShader(fragmentShader); + + this._program = program; + + // Save code. + this.vertexCode = vertexShaderCode; + this.fragmentCode = fragmentShaderCode; + if (!_gl.getProgramParameter(program, _gl.LINK_STATUS)) { return 'Could not link program\n' + _gl.getProgramInfoLog(program); } @@ -8801,14 +8700,6 @@ var GLProgram = Base.extend({ this._locations[uniformSymbol] = _gl.getUniformLocation(program, uniformSymbol); } - _gl.deleteShader(vertexShader); - _gl.deleteShader(fragmentShader); - - this._program = program; - - // Save code. - this.vertexCode = vertexShaderCode; - this.fragmentCode = fragmentShaderCode; } }); @@ -9665,7 +9556,7 @@ Shader.source = function (name) { return obj; }; -var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; +var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv * uvRepeat + uvOffset;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. @@ -9689,11 +9580,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4x4 Matrix - * @name mat4 - */ - var mat4 = {}; /** @@ -10609,7 +10495,6 @@ mat4.frob = function (a) { // TODO Resources like shader, texture, geometry reference management // Trace and find out which shader, texture, geometry can be destroyed -// Light header Shader['import'](prezGlsl); var mat4Create = mat4.create; @@ -10835,8 +10720,10 @@ var Renderer = Base.extend(function () { // set the display size of the canvas. var dpr = this.devicePixelRatio; if (width != null) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; + if (canvas.style) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } // set the size of the drawingBuffer canvas.width = width * dpr; canvas.height = height * dpr; @@ -11119,6 +11006,7 @@ var Renderer = Base.extend(function () { else { this.trigger('error', errorMsg); } + } }, @@ -11701,6 +11589,12 @@ var Renderer = Base.extend(function () { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -11929,13 +11823,6 @@ Renderer.DEPTH_BUFFER_BIT = glenum.DEPTH_BUFFER_BIT; */ Renderer.STENCIL_BUFFER_BIT = glenum.STENCIL_BUFFER_BIT; -/** - * @constructor - * @alias clay.Vector3 - * @param {number} x - * @param {number} y - * @param {number} z - */ var Vector3 = function(x, y, z) { x = x || 0; @@ -12926,14 +12813,6 @@ Object.defineProperties(Vector3, { } }); -/** - * @constructor - * @alias clay.Quaternion - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Quaternion = function (x, y, z, w) { x = x || 0; @@ -13187,6 +13066,19 @@ Quaternion.prototype = { this._dirty = true; return this; }, + /** + * + * @param axis + * @param rad + */ + rotateAxis:function (axis,rad) { + + var quat2 = new Quaternion().array; + + quat.rotateAxis(this.array,quat2,axis,rad); + this._dirty = true; + return this; + }, /** * Rotate self by a given radian about X axis @@ -13194,7 +13086,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateX: function (rad) { - quat.rotateX(this.array, this.array, rad); + + quat.rotateX(this.array, rad); this._dirty = true; return this; }, @@ -13205,7 +13098,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateY: function (rad) { - quat.rotateY(this.array, this.array, rad); + + quat.rotateY(this.array, rad); this._dirty = true; return this; }, @@ -13216,7 +13110,7 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateZ: function (rad) { - quat.rotateZ(this.array, this.array, rad); + quat.rotateZ(this.array, rad); this._dirty = true; return this; }, @@ -13696,10 +13590,6 @@ Quaternion.fromEuler = function (out, v, order) { } }; -/** - * @constructor - * @alias clay.Matrix4 - */ var Matrix4 = function() { this._axisX = new Vector3(); @@ -15484,12 +15374,6 @@ var Light = Node.extend(function(){ } }); -/** - * @constructor - * @alias clay.Plane - * @param {clay.Vector3} [normal] - * @param {number} [distance] - */ var Plane$1 = function(normal, distance) { /** * Normal of the plane @@ -16138,10 +16022,6 @@ Ray.prototype = { } }; -/** - * @constructor clay.Camera - * @extends clay.Node - */ var Camera = Node.extend(function () { return /** @lends clay.Camera# */ { /** @@ -18134,13 +18014,6 @@ Geometry.IndicesBuffer = GeometryBase.IndicesBuffer; Geometry.Attribute = Attribute; -/** - * @constructor clay.geometry.Plane - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.widthSegments] - * @param {number} [opt.heightSegments] - */ var Plane$3 = Geometry.extend( /** @lends clay.geometry.Plane# */ { @@ -18332,18 +18205,6 @@ function createPlane(pos, widthSegments, heightSegments) { return plane; } -/** - * @constructor clay.geometry.Sphere - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [widthSegments] - * @param {number} [heightSegments] - * @param {number} [phiStart] - * @param {number} [phiLength] - * @param {number} [thetaStart] - * @param {number} [thetaLength] - * @param {number} [radius] - */ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { dynamic: false, /** @@ -18467,17 +18328,6 @@ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { } }); -/** - * @constructor clay.geometry.ParametricSurface - * @extends clay.Geometry - * @param {Object} [opt] - * @param {Object} [generator] - * @param {Function} generator.x - * @param {Function} generator.y - * @param {Function} generator.z - * @param {Array} [generator.u=[0, 1, 0.05]] - * @param {Array} [generator.v=[0, 1, 0.05]] - */ var ParametricSurface$1 = Geometry.extend( /** @lends clay.geometry.ParametricSurface# */ { @@ -18569,11 +18419,6 @@ var ParametricSurface$1 = Geometry.extend( * Base class for all textures like compressed texture, texture2d, texturecube * TODO mapping */ -/** - * @constructor - * @alias clay.Texture - * @extends clay.core.Base - */ var Texture = Base.extend( /** @lends clay.Texture# */ { /** * Texture width, readonly when the texture source is image @@ -19168,9 +19013,7 @@ var Texture2D = Texture.extend(function () { isRenderable: function () { if (this.image) { - return this.image.nodeName === 'CANVAS' - || this.image.nodeName === 'VIDEO' - || this.image.complete; + return this.image.width > 0 && this.image.height > 0; } else { return !!(this.width && this.height); @@ -19506,16 +19349,9 @@ Object.defineProperty(TextureCube.prototype, 'height', { } }); function isImageRenderable(image) { - return image.nodeName === 'CANVAS' || - image.nodeName === 'VIDEO' || - image.complete; + return image.width > 0 && image.height > 0; } -/** - * @constructor - * @alias clay.Renderable - * @extends clay.Node - */ var Renderable = Node.extend(/** @lends clay.Renderable# */ { /** * @type {clay.Material} @@ -19718,10 +19554,6 @@ Renderable.CW = glenum.CW; */ Renderable.CCW = glenum.CCW; -/** - * @constructor clay.Mesh - * @extends clay.Renderable - */ var Mesh = Renderable.extend(/** @lends clay.Mesh# */ { /** * Used when it is a skinned mesh @@ -19775,10 +19607,6 @@ Mesh.FRONT_AND_BACK = glenum.FRONT_AND_BACK; Mesh.CW = glenum.CW; Mesh.CCW = glenum.CCW; -/** - * @constructor clay.camera.Perspective - * @extends clay.Camera - */ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ /** * Vertical field of view in degrees @@ -19830,10 +19658,6 @@ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ } }); -/** - * @constructor clay.camera.Orthographic - * @extends clay.Camera - */ var Orthographic$1 = Camera.extend( /** @lends clay.camera.Orthographic# */ { @@ -19894,9 +19718,8 @@ var Orthographic$1 = Camera.extend( } }); -var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; +var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; -// Import standard shader Shader['import'](standardEssl); var TEXTURE_PROPERTIES = ['diffuseMap', 'normalMap', 'roughnessMap', 'metalnessMap', 'emissiveMap', 'environmentMap', 'brdfLookup', 'ssaoMap', 'aoMap']; @@ -20270,10 +20093,6 @@ var library = { } }; -/** - * @constructor clay.Joint - * @extends clay.core.Base - */ var Joint = Base.extend( /** @lends clay.Joint# */ { @@ -20722,13 +20541,14 @@ library.template('clay.prez', Shader.source('clay.prez.vertex'), Shader.source(' library.template('clay.standard', Shader.source('clay.standard.vertex'), Shader.source('clay.standard.fragment')); library.template('clay.standardMR', Shader.source('clay.standardMR.vertex'), Shader.source('clay.standardMR.fragment')); +// TODO Must export a module and be used in the other modules. Or it will be tree shaked + /** * glTF Loader * Specification https://github.com/KhronosGroup/glTF/blob/master/specification/README.md * * TODO Morph targets */ -// Import builtin shader var semanticAttributeMap = { 'NORMAL': 'normal', 'POSITION': 'position', @@ -20774,7 +20594,8 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { if (quantizeExtension) { var decodedArr = new vendor.Float32Array(size * accessorInfo.count); var decodeMatrix = quantizeExtension.decodeMatrix; - var decodeOffset, decodeScale; + var decodeOffset; + var decodeScale; var decodeOffset = new Array(size); var decodeScale = new Array(size); for (var k = 0; k < size; k++) { @@ -20792,6 +20613,34 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { return arr; } +function base64ToBinary(input, charStart) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var lookup = new Uint8Array(130); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + // Ignore + var len = input.length - charStart; + if (input.charAt(len - 1) === '=') { len--; } + if (input.charAt(len - 1) === '=') { len--; } + + var uarray = new Uint8Array((len / 4) * 3); + + for (var i = 0, j = charStart; i < uarray.length;) { + var c1 = lookup[input.charCodeAt(j++)]; + var c2 = lookup[input.charCodeAt(j++)]; + var c3 = lookup[input.charCodeAt(j++)]; + var c4 = lookup[input.charCodeAt(j++)]; + + uarray[i++] = (c1 << 2) | (c2 >> 4); + uarray[i++] = ((c2 & 15) << 4) | (c3 >> 2); + uarray[i++] = ((c3 & 3) << 6) | c4; + } + + return uarray.buffer; +} + + /** * @typedef {Object} clay.loader.GLTF.Result * @property {Object} json @@ -21025,7 +20874,7 @@ function () { loading++; var path = bufferInfo.uri; - self._loadBuffer(path, function (buffer) { + self._loadBuffers(path, function (buffer) { lib.buffers[idx] = buffer; checkLoad(); }, checkLoad); @@ -21107,7 +20956,7 @@ function () { * Binary file path resolver. User can override it * @param {string} path */ - resolveBinaryPath: function (path) { + resolveBufferPath: function (path) { if (path && path.match(/^data:(.*?)base64,/)) { return path; } @@ -21135,18 +20984,15 @@ function () { return util$1.relative2absolute(path, rootPath); }, - _getShader: function () { - if (typeof this.shader === 'string') { - return this.shaderLibrary.get(this.shader); - } - else if (this.shader instanceof Shader) { - return this.shader; - } - }, - - _loadBuffer: function (path, onsuccess, onerror) { + /** + * Buffer loader + * @param {string} + * @param {Function} onsuccess + * @param {Function} onerror + */ + loadBuffer: function (path, onsuccess, onerror) { vendor.request.get({ - url: this.resolveBinaryPath(path), + url: path, responseType: 'arraybuffer', onload: function (buffer) { onsuccess && onsuccess(buffer); @@ -21157,6 +21003,32 @@ function () { }); }, + _getShader: function () { + if (typeof this.shader === 'string') { + return this.shaderLibrary.get(this.shader); + } + else if (this.shader instanceof Shader) { + return this.shader; + } + }, + + _loadBuffers: function (path, onsuccess, onerror) { + var base64Prefix = 'data:application/octet-stream;base64,'; + var strStart = path.substr(0, base64Prefix.length); + if (strStart === base64Prefix) { + onsuccess( + base64ToBinary(path, base64Prefix.length) + ); + } + else { + this.loadBuffer( + this.resolveBufferPath(path), + onsuccess, + onerror + ); + } + }, + // https://github.com/KhronosGroup/glTF/issues/100 // https://github.com/KhronosGroup/glTF/issues/193 _parseSkins: function (json, lib) { @@ -21500,7 +21372,7 @@ function () { var material; var diffuseMap, glossinessMap, specularMap, normalMap, emissiveMap, occlusionMap; var enabledTextures = []; - // TODO texCoord + // TODO texCoord if (specularGlossinessMatInfo.diffuseTexture) { diffuseMap = lib.textures[specularGlossinessMatInfo.diffuseTexture.index] || null; diffuseMap && enabledTextures.push('diffuseMap'); @@ -21915,19 +21787,6 @@ GLTFLoader.generateMeshName = function (meshes, idx, primitiveIdx) { return primitiveIdx === 0 ? meshName : (meshName + '$' + primitiveIdx); }; -/** - * @constructor clay.light.Directional - * @extends clay.Light - * - * @example - * var light = new clay.light.Directional({ - * intensity: 0.5, - * color: [1.0, 0.0, 0.0] - * }); - * light.position.set(10, 10, 10); - * light.lookAt(clay.Vector3.ZERO); - * scene.add(light); - */ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { /** * @type {number} @@ -21983,10 +21842,6 @@ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { } }); -/** - * @constructor clay.light.Point - * @extends clay.Light - */ var PointLight = Light.extend(/** @lends clay.light.Point# */ { /** * @type {number} @@ -22034,10 +21889,6 @@ var PointLight = Light.extend(/** @lends clay.light.Point# */ { } }); -/** - * @constructor clay.light.Spot - * @extends clay.Light - */ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { /** * @type {number} @@ -22131,10 +21982,6 @@ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { } }); -/** - * @constructor clay.light.Ambient - * @extends clay.Light - */ var AmbientLight = Light.extend({ castShadow: false @@ -22786,7 +22633,9 @@ var Skybox$1 = Mesh.extend(function () { environmentMap: null, - culling: false + culling: false, + + _dummyCamera: new Perspective$1() }; }, function () { var scene = this.scene; @@ -22857,8 +22706,17 @@ var Skybox$1 = Mesh.extend(function () { }, renderSkybox: function (renderer, camera) { + var dummyCamera = this._dummyCamera; + dummyCamera.aspect = renderer.getViewportAspect(); + dummyCamera.fov = camera.fov || 50; + dummyCamera.updateProjectionMatrix(); + Matrix4.invert(dummyCamera.invProjectionMatrix, dummyCamera.projectionMatrix); + dummyCamera.worldTransform.copy(camera.worldTransform); + dummyCamera.viewMatrix.copy(camera.viewMatrix); + this.position.copy(camera.getWorldPosition()); this.update(); + // Don't remember to disable blend renderer.gl.disable(renderer.gl.BLEND); if (this.material.get('lod') > 0) { @@ -22867,7 +22725,7 @@ var Skybox$1 = Mesh.extend(function () { else { this.material.undefine('fragment', 'LOD'); } - renderer.renderPass([this], camera); + renderer.renderPass([this], dummyCamera); } }); @@ -23008,8 +22866,6 @@ var EnvironmentMapPass = Base.extend(function() { } }); -// http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx -// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js var DDS_MAGIC = 0x20534444; var DDSD_MIPMAPCOUNT = 0x20000; @@ -23294,9 +23150,6 @@ var ret$1 = { } }; -/** - * @alias clay.util.texture - */ var textureUtil = { /** * @param {string|object} path @@ -23870,12 +23723,6 @@ cubemapUtil.generateNormalDistribution = function (roughnessLevels, sampleSize) }; // https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/AmbientCubemap/ -/** - * Ambient cubemap light provides specular parts of Image Based Lighting. - * Which is a basic requirement for Physically Based Rendering - * @constructor clay.light.AmbientCubemap - * @extends clay.Light - */ var AmbientCubemapLight = Light.extend({ /** @@ -23964,11 +23811,6 @@ var AmbientCubemapLight = Light.extend({ */ }); -/** - * Spherical Harmonic Ambient Light - * @constructor clay.light.AmbientSH - * @extends clay.Light - */ var AmbientSHLight = Light.extend({ castShadow: false, @@ -24119,7 +23961,7 @@ function isPowerOfTwo$2(width, height) { (height & (height-1)) === 0; } -var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; +var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; var targets$2 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; @@ -24138,6 +23980,12 @@ function getDepthMaterialUniform(renderable, depthMaterial, symbol) { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -24995,10 +24843,6 @@ ShadowMapPass.VSM = 1; */ ShadowMapPass.PCF = 2; -/** - * @constructor clay.picking.RayPicking - * @extends clay.core.Base - */ var RayPicking = Base.extend(/** @lends clay.picking.RayPicking# */{ /** * Target scene @@ -25251,6 +25095,7 @@ var sh = {}; var targets$3 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; +// Project on gpu, but needs browser to support readPixels as Float32Array. function harmonics(normal, index){ var x = normal[0]; var y = normal[1]; @@ -25465,6 +25310,7 @@ var EVE_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', /** * @typedef {Object} StandardMaterialMRConfig + * @property {string} [name] * @property {string} [shader='standardMR'] * @property {Color} [color] * @property {number} [alpha] @@ -26149,6 +25995,10 @@ App3D.prototype.createMaterial = function (matConfig) { var material = new Material({ shader: shader }); + if (matConfig.name) { + material.name = matConfig.name; + } + var texturesLoading = []; function makeTextureSetter(key) { return function (texture) { @@ -26291,6 +26141,7 @@ App3D.prototype.createSphere = function (material, parentNode, subdivision) { return this.createMesh(sphere, material, parentNode); }; +// TODO may be modified? /** * Create a plane mesh and add it to the scene or the given parent node. * @function @@ -26743,11 +26594,6 @@ var application = { } }; -/** - * @constructor - * @alias clay.async.Task - * @mixes clay.core.mixin.notifier - */ function Task() { this._fullfilled = false; this._rejected = false; @@ -26859,11 +26705,6 @@ Task.makeTask = function() { util$1.extend(Task.prototype, notifier); -/** - * @constructor - * @alias clay.async.TaskGroup - * @extends clay.async.Task - */ var TaskGroup = function () { Task.apply(this, arguments); @@ -27085,16 +26926,6 @@ TaskGroup.prototype.getTaskNumber = function (recursive) { } }; -// PENDING -// Use topological sort ? - -/** - * Node of graph based post processing. - * - * @constructor clay.compositor.CompositorNode - * @extends clay.core.Base - * - */ var CompositorNode = Base.extend(function () { return /** @lends clay.compositor.CompositorNode# */ { /** @@ -27328,10 +27159,6 @@ var CompositorNode = Base.extend(function () { } }); -/** - * @constructor clay.compositor.Graph - * @extends clay.core.Base - */ var Graph = Base.extend(function () { return /** @lends clay.compositor.Graph# */ { /** @@ -27464,13 +27291,6 @@ var Graph = Base.extend(function () { } }); -/** - * Compositor provide graph based post processing - * - * @constructor clay.compositor.Compositor - * @extends clay.compositor.Graph - * - */ var Compositor = Graph.extend(function() { return { // Output node @@ -27545,10 +27365,6 @@ var Compositor = Graph.extend(function() { } }); -/** - * @constructor clay.compositor.SceneNode - * @extends clay.compositor.CompositorNode - */ var SceneNode$1 = CompositorNode.extend( /** @lends clay.compositor.SceneNode# */ { @@ -27635,10 +27451,6 @@ var SceneNode$1 = CompositorNode.extend( } }); -/** - * @constructor clay.compositor.TextureNode - * @extends clay.compositor.CompositorNode - */ var TextureNode$1 = CompositorNode.extend(function() { return /** @lends clay.compositor.TextureNode# */ { /** @@ -27664,45 +27476,6 @@ var TextureNode$1 = CompositorNode.extend(function() { }); // TODO Shader library -// TODO curlnoise demo wrong - -// PENDING -// Use topological sort ? - -/** - * Filter node - * - * @constructor clay.compositor.FilterNode - * @extends clay.compositor.CompositorNode - * - * @example - var node = new clay.compositor.FilterNode({ - name: 'fxaa', - shader: clay.Shader.source('clay.compositor.fxaa'), - inputs: { - texture: { - node: 'scene', - pin: 'color' - } - }, - // Multiple outputs is preserved for MRT support in WebGL2.0 - outputs: { - color: { - attachment: clay.FrameBuffer.COLOR_ATTACHMENT0 - parameters: { - format: clay.Texture.RGBA, - width: 512, - height: 512 - }, - // Node will keep the RTT rendered in last frame - keepLastFrame: true, - // Force the node output the RTT rendered in last frame - outputLastFrame: true - } - } - }); - * - */ var FilterNode$1 = CompositorNode.extend(function () { return /** @lends clay.compositor.FilterNode# */ { /** @@ -27990,9 +27763,6 @@ var blendEssl = "@export clay.compositor.blend\n#define SHADER_NAME blend\n#ifde var fxaaEssl = "@export clay.compositor.fxaa\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nvarying vec2 v_Texcoord;\n#define FXAA_REDUCE_MIN (1.0/128.0)\n#define FXAA_REDUCE_MUL (1.0/8.0)\n#define FXAA_SPAN_MAX 8.0\n@import clay.util.rgbm\nvoid main()\n{\n vec2 resolution = 1.0 / viewport.zw;\n vec3 rgbNW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbNE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ) ).xyz;\n vec4 rgbaM = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution ) );\n vec3 rgbM = rgbaM.xyz;\n float opacity = rgbaM.w;\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float lumaNW = dot( rgbNW, luma );\n float lumaNE = dot( rgbNE, luma );\n float lumaSW = dot( rgbSW, luma );\n float lumaSE = dot( rgbSE, luma );\n float lumaM = dot( rgbM, luma );\n float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\n float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\n float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\n dir = min( vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * resolution;\n vec3 rgbA = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA *= 0.5;\n vec3 rgbB = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * -0.5 ) ).xyz;\n rgbB += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * 0.5 ) ).xyz;\n rgbB *= 0.25;\n rgbB += rgbA * 0.5;\n float lumaB = dot( rgbB, luma );\n if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) )\n {\n gl_FragColor = vec4( rgbA, opacity );\n }\n else {\n gl_FragColor = vec4( rgbB, opacity );\n }\n}\n@end"; -// import fxaa3Essl from './source/compositor/fxaa3.glsl.js'; - -// TODO Must export a module and be used in the other modules. Or it will be tree shaked function register(Shader) { // Some build in shaders Shader['import'](coloradjustEssl); @@ -28921,16 +28691,6 @@ var GBuffer = Base.extend(function () { } }); -/** - * @constructor clay.geometry.Cone - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.topRadius] - * @param {number} [opt.bottomRadius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { dynamic: false, /** @@ -29053,15 +28813,6 @@ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { } }); -/** - * @constructor clay.geometry.Cylinder - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.radius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cylinder$1 = Geometry.extend( /** @lends clay.geometry.Cylinder# */ { @@ -29131,7 +28882,6 @@ var tubeGlsl = "@export clay.deferred.tube_light\n@import clay.deferred.chunk.li // Light-pre pass deferred rendering // http://www.realtimerendering.com/blog/deferred-lighting-approaches/ -// Light shaders Shader.import(prezGlsl); Shader.import(utilGlsl); Shader.import(lightvolumeGlsl); @@ -29759,11 +29509,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x2 Matrix - * @name mat2 - */ - var mat2 = {}; /** @@ -30010,25 +29755,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x3 Matrix - * @name mat2d - * - * @description - * A mat2d contains six elements defined as: - *
- * [a, c, tx,
- *  b, d, ty]
- * 
- * This is a short form for the 3x3 matrix: - *
- * [a, c, tx,
- *  b, d, ty,
- *  0, 0, 1]
- * 
- * The last row is ignored so the array is shorter and operations are faster. - */ - var mat2d = {}; /** @@ -30273,10 +29999,6 @@ var glmatrix = { // DEPRECATED -/** - * @constructor clay.light.Sphere - * @extends {clay.Light} - */ var SphereLight = Light.extend( /** @lends clay.light.Sphere# */ { @@ -30323,10 +30045,6 @@ var SphereLight = Light.extend( } }); -/** - * @constructor clay.light.Tube - * @extends {clay.Light} - */ var TubeLight = Light.extend( /** @lends clay.light.Tube# */ { @@ -30381,10 +30099,6 @@ var TubeLight = Light.extend( } }); -/** - * @constructor clay.loader.FX - * @extends clay.core.Base - */ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { /** * @type {string} @@ -30441,10 +30155,6 @@ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { } }); -/** - * @constructor - * @alias clay.Matrix2 - */ var Matrix2 = function() { /** @@ -30725,10 +30435,6 @@ Matrix2.transpose = function(out, a) { return out; }; -/** - * @constructor - * @alias clay.Matrix2d - */ var Matrix2d = function() { /** * Storage of Matrix2d @@ -30991,10 +30697,6 @@ Matrix2d.translate = function(out, a, v) { return out; }; -/** - * @constructor - * @alias clay.Matrix3 - */ var Matrix3 = function () { /** @@ -31384,11 +31086,6 @@ Matrix3.translate = function (out, a, v) { return out; }; -/** - * Random or constant 1d, 2d, 3d vector generator - * @constructor - * @alias clay.Value - */ var Value = function() {}; /** @@ -31523,14 +31220,6 @@ Value.random3D = function(min, max) { return new Random3D(min, max); }; -/** - * @constructor - * @alias clay.Vector4 - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Vector4 = function(x, y, z, w) { x = x || 0; @@ -32239,10 +31928,6 @@ Vector4.transformQuat = function(out, a, q) { return out; }; -/** - * @constructor - * @alias clay.particle.Particle - */ var Particle = function() { /** * @type {clay.Vector3} @@ -32304,10 +31989,6 @@ Particle.prototype.update = function(deltaTime) { } }; -/** - * @constructor clay.particle.Emitter - * @extends clay.core.Base - */ var Emitter = Base.extend( /** @lends clay.particle.Emitter# */ { /** * Maximum number of particles created by this emitter @@ -32455,10 +32136,6 @@ Emitter.random2D = Value.random2D; */ Emitter.random3D = Value.random3D; -/** - * @constructor clay.particle.Field - * @extends clay.core.Base - */ var Field = Base.extend({}, { /** * Apply a field to the particle and update the particle velocity @@ -32471,10 +32148,6 @@ var Field = Base.extend({}, { applyTo: function(velocity, position, weight, deltaTime) {} }); -/** - * @constructor clay.particle.ForceField - * @extends clay.particle.Field - */ var ForceField = Field.extend(function() { return { force: new Vector3() @@ -33159,10 +32832,11 @@ var FreeControl = Base.extend(function() { this.trigger('change'); }, - _detectMovementChange: function () { + _detectMovementChange: function (frameTime) { if (this._moveForward || this._moveBackward || this._moveLeft || this._moveRight) { this.trigger('change'); } + this.update(frameTime); }, _keyDown: function(e) { @@ -33210,23 +32884,6 @@ var FreeControl = Base.extend(function() { } }); -/** - * Gamepad Control plugin. - * - * @constructor clay.plugin.GamepadControl - * - * @example - * init: function(app) { - * this._gamepadControl = new clay.plugin.GamepadControl({ - * target: camera, - * onStandardGamepadReady: customCallback - * }); - * }, - * - * loop: function(app) { - * this._gamepadControl.update(app.frameTime); - * } - */ var GamepadControl = Base.extend(function() { return /** @lends clay.plugin.GamepadControl# */ { @@ -33764,6 +33421,12 @@ var InfinitePlane = Mesh.extend({ })() }); +var MOUSE_BUTTON_KEY_MAP = { + left: 0, + middle: 1, + right: 2 +}; + function convertToArray(val) { if (!Array.isArray(val)) { val = [val, val]; @@ -33780,6 +33443,9 @@ var OrbitControl = Base.extend(function () { return /** @lends clay.plugin.OrbitControl# */ { + /** + * @type {clay.Timeline} + */ timeline: null, /** @@ -33810,6 +33476,22 @@ var OrbitControl = Base.extend(function () { */ maxDistance: 1000, + /** + * Only available when camera is orthographic + */ + maxOrthographicSize: 300, + + /** + * Only available when camera is orthographic + */ + minOrthographicSize: 30, + + /** + * Aspect of orthographic camera + * Only available when camera is orthographic + */ + orthographicAspect: 1, + /** * Minimum alpha rotation */ @@ -33844,6 +33526,9 @@ var OrbitControl = Base.extend(function () { */ autoRotateSpeed: 60, + panMouseButton: 'middle', + rotateMouseButton: 'left', + /** * Pan or rotate * @type {String} @@ -33921,6 +33606,9 @@ var OrbitControl = Base.extend(function () { if (this.timeline) { this.timeline.on('frame', this.update, this); } + if (this.target) { + this.decomposeTransform(); + } }, /** @@ -33963,6 +33651,23 @@ var OrbitControl = Base.extend(function () { this._needsUpdate = true; }, + /** + * Get size of orthographic viewing volume + * @return {number} + */ + getOrthographicSize: function () { + return this._orthoSize; + }, + + /** + * Set size of orthographic viewing volume + * @param {number} size + */ + setOrthographicSize: function (size) { + this._orthoSize = size; + this._needsUpdate = true; + }, + /** * Get alpha rotation * Alpha angle for top-down rotation. Positive to rotate to top. @@ -34028,6 +33733,7 @@ var OrbitControl = Base.extend(function () { 'autoRotateDirection', 'autoRotateSpeed', 'damping', 'minDistance', 'maxDistance', + 'minOrthographicSize', 'maxOrthographicSize', 'orthographicAspect', 'minAlpha', 'maxAlpha', 'minBeta', 'maxBeta', 'rotateSensitivity', 'zoomSensitivity', 'panSensitivity' ].forEach(function (key) { @@ -34039,6 +33745,9 @@ var OrbitControl = Base.extend(function () { if (opts.distance != null) { this.setDistance(opts.distance); } + if (opts.orthographicSize != null) { + this.setOrthographicSize(opts.orthographicSize); + } if (opts.alpha != null) { this.setAlpha(opts.alpha); @@ -34050,11 +33759,17 @@ var OrbitControl = Base.extend(function () { if (opts.center) { this.setCenter(opts.center); } + + if (this.target) { + this._updateTransform(); + this.target.update(); + } }, /** * @param {Object} opts * @param {number} opts.distance + * @param {number} opts.orthographicSize * @param {number} opts.alpha * @param {number} opts.beta * @param {Array.} opts.center @@ -34075,6 +33790,10 @@ var OrbitControl = Base.extend(function () { obj.distance = this.getDistance(); target.distance = opts.distance; } + if (opts.orthographicSize != null) { + obj.orthographicSize = this.getOrthographicSize(); + target.orthographicSize = opts.orthographicSize; + } if (opts.alpha != null) { obj.alpha = this.getAlpha(); target.alpha = opts.alpha; @@ -34101,6 +33820,9 @@ var OrbitControl = Base.extend(function () { if (obj.distance != null) { self.setDistance(obj.distance); } + if (obj.orthographicSize != null) { + self.setOrthographicSize(obj.orthographicSize); + } if (obj.center != null) { self.setCenter(obj.center); } @@ -34150,7 +33872,7 @@ var OrbitControl = Base.extend(function () { } // Fixed deltaTime - this._updateDistance(Math.min(deltaTime, 50)); + this._updateDistanceOrSize(Math.min(deltaTime, 50)); this._updatePan(Math.min(deltaTime, 50)); this._updateRotate(Math.min(deltaTime, 50)); @@ -34175,15 +33897,31 @@ var OrbitControl = Base.extend(function () { this._vectorDamping(velocity, this.damping); }, - _updateDistance: function (deltaTime) { + _updateDistanceOrSize: function (deltaTime) { this._setDistance(this._distance + this._zoomSpeed * deltaTime / 20); - this._zoomSpeed *= this.damping; + if (!(this.target instanceof Perspective$1)) { + this._setOrthoSize(this._orthoSize + this._zoomSpeed * deltaTime / 20); + } + + this._zoomSpeed *= Math.pow(this.damping, deltaTime / 16); }, _setDistance: function (distance) { this._distance = Math.max(Math.min(distance, this.maxDistance), this.minDistance); }, + _setOrthoSize: function (size) { + this._orthoSize = Math.max(Math.min(size, this.maxOrthographicSize), this.minOrthographicSize); + var camera = this.target; + var cameraHeight = this._orthoSize; + // TODO + var cameraWidth = cameraHeight * this.orthographicAspect; + camera.left = -cameraWidth / 2; + camera.right = cameraWidth / 2; + camera.top = cameraHeight / 2; + camera.bottom = -cameraHeight / 2; + }, + _updatePan: function (deltaTime) { var velocity = this._panVelocity; var len = this._distance; @@ -34247,15 +33985,6 @@ var OrbitControl = Base.extend(function () { return; } - // FIXME euler order...... - // FIXME alpha is not certain when beta is 90 or -90 - // var euler = new Vector3(); - // euler.eulerFromMat3( - // new Matrix3().fromQuat(this.target.rotation), 'ZYX' - // ); - // euler.eulerFromQuat( - // this.target.rotation.normalize(), 'ZYX' - // ); this.target.updateWorldTransform(); var forward = this.target.worldTransform.z; @@ -34269,6 +33998,9 @@ var OrbitControl = Base.extend(function () { this.setAlpha(this.getAlpha()); this._setDistance(this.target.position.dist(this._center)); + if (!(this.target instanceof Perspective$1)){ + this._setOrthoSize(this.target.top - this.target.bottom); + } }, _mouseDownHandler: function (e) { @@ -34288,12 +34020,10 @@ var OrbitControl = Base.extend(function () { this._processGesture(e, 'start'); } else { - // Left button. - if (e.button === 0) { + if (e.button === MOUSE_BUTTON_KEY_MAP[this.rotateMouseButton]) { this._mode = 'rotate'; } - // Middle button. - else if (e.button === 1) { + else if (e.button === MOUSE_BUTTON_KEY_MAP[this.panMouseButton]) { this._mode = 'pan'; /** @@ -34385,11 +34115,21 @@ var OrbitControl = Base.extend(function () { _zoomHandler: function (e, delta) { - var distance = Math.max(Math.min( - this._distance - this.minDistance, - this.maxDistance - this._distance - )); - this._zoomSpeed = delta * Math.max(distance / 40 * this.zoomSensitivity, 0.2); + var speed; + if (this.target instanceof Perspective$1) { + speed = Math.max(Math.max(Math.min( + this._distance - this.minDistance, + this.maxDistance - this._distance + )) / 20, 0.5); + } + else { + speed = Math.max(Math.max(Math.min( + this._orthoSize - this.minOrthographicSize, + this.maxOrthographicSize - this._orthoSize + )) / 20, 0.5); + } + + this._zoomSpeed = (delta > 0 ? -1 : 1) * speed * this.zoomSensitivity; this._rotating = false; @@ -34480,18 +34220,11 @@ Object.defineProperty(OrbitControl.prototype, 'target', { /** * StaticGeometry can not be changed once they've been setup */ -/** - * @constructor clay.StaticGeometry - * @extends clay.Geometry - */ var StaticGeometry = Geometry.extend({ dynamic: false }); // TODO test -/** - * @namespace clay.util.mesh - */ var meshUtil = { /** * Merge multiple meshes to one. @@ -35456,3 +35189,4 @@ exports.vr = vr; Object.defineProperty(exports, '__esModule', { value: true }); }))); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuICAgIHZlYzMubm9ybWFsaXplKGF4aXMsYXhpcyk7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShxdWF0MixheGlzLHJhZCk7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dCxvdXQscXVhdDIpO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5hZGQgPSB2ZWM0LmFkZDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLCBhdyA9IGFbM10sXHJcbiAgICAgICAgYnggPSBiWzBdLCBieSA9IGJbMV0sIGJ6ID0gYlsyXSwgYncgPSBiWzNdO1xyXG5cclxuICAgIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XHJcbiAgICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xyXG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lm11bCA9IHF1YXQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc2NhbGUgPSB2ZWM0LnNjYWxlO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuICAgIHF1YXQucm90YXRlQXhpcyhvdXQscXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuICAgIHZhciBxdWF0MiA9WzAsMCwwLDFdO1xyXG4gICAgdmFyIGF4aXMgPSBbMCwwLDFdO1xyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFcgY29tcG9uZW50IG9mIGEgcXVhdCBmcm9tIHRoZSBYLCBZLCBhbmQgWiBjb21wb25lbnRzLlxyXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxyXG4gKiBBbnkgZXhpc3RpbmcgVyBjb21wb25lbnQgd2lsbCBiZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIFcgY29tcG9uZW50IG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gTWF0aC5zcXJ0KE1hdGguYWJzKDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeikpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmRvdCA9IHZlYzQuZG90O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlcnAgPSB2ZWM0LmxlcnA7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgdmFyICAgICAgICBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoIGNvc29tIDwgMC4wICkge1xyXG4gICAgICAgIGNvc29tID0gLWNvc29tO1xyXG4gICAgICAgIGJ4ID0gLSBieDtcclxuICAgICAgICBieSA9IC0gYnk7XHJcbiAgICAgICAgYnogPSAtIGJ6O1xyXG4gICAgICAgIGJ3ID0gLSBidztcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBjb2VmZmljaWVudHNcclxuICAgIGlmICggKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxICkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gXCJmcm9tXCIgYW5kIFwidG9cIiBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIGRvdCA9IGEwKmEwICsgYTEqYTEgKyBhMiphMiArIGEzKmEzLFxyXG4gICAgICAgIGludkRvdCA9IGRvdCA/IDEuMC9kb3QgOiAwO1xyXG5cclxuICAgIC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXHJcblxyXG4gICAgb3V0WzBdID0gLWEwKmludkRvdDtcclxuICAgIG91dFsxXSA9IC1hMSppbnZEb3Q7XHJcbiAgICBvdXRbMl0gPSAtYTIqaW52RG90O1xyXG4gICAgb3V0WzNdID0gYTMqaW52RG90O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBxdWF0XHJcbiAqIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdC5pbnZlcnNlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lmxlbmd0aCA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5sZW4gPSBxdWF0Lmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3F1YXJlZExlbmd0aCA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNxckxlbiA9IHF1YXQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cclxuICpcclxuICogTk9URTogVGhlIHJlc3VsdGFudCBxdWF0ZXJuaW9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyB5b3Ugc2hvdWxkIGJlIHN1cmVcclxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tTWF0MyA9IGZ1bmN0aW9uKG91dCwgbSkge1xyXG4gICAgLy8gQWxnb3JpdGhtIGluIEtlbiBTaG9lbWFrZSdzIGFydGljbGUgaW4gMTk4NyBTSUdHUkFQSCBjb3Vyc2Ugbm90ZXNcclxuICAgIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxyXG4gICAgdmFyIGZUcmFjZSA9IG1bMF0gKyBtWzRdICsgbVs4XTtcclxuICAgIHZhciBmUm9vdDtcclxuXHJcbiAgICBpZiAoIGZUcmFjZSA+IDAuMCApIHtcclxuICAgICAgICAvLyB8d3wgPiAxLzIsIG1heSBhcyB3ZWxsIGNob29zZSB3ID4gMS8yXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgIC8vIDJ3XHJcbiAgICAgICAgb3V0WzNdID0gMC41ICogZlJvb3Q7XHJcbiAgICAgICAgZlJvb3QgPSAwLjUvZlJvb3Q7ICAvLyAxLyg0dylcclxuICAgICAgICBvdXRbMF0gPSAobVs1XS1tWzddKSpmUm9vdDtcclxuICAgICAgICBvdXRbMV0gPSAobVs2XS1tWzJdKSpmUm9vdDtcclxuICAgICAgICBvdXRbMl0gPSAobVsxXS1tWzNdKSpmUm9vdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gfHd8IDw9IDEvMlxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICBpZiAoIG1bNF0gPiBtWzBdIClcclxuICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGlmICggbVs4XSA+IG1baSozK2ldIClcclxuICAgICAgICAgIGkgPSAyO1xyXG4gICAgICAgIHZhciBqID0gKGkrMSklMztcclxuICAgICAgICB2YXIgayA9IChpKzIpJTM7XHJcblxyXG4gICAgICAgIGZSb290ID0gTWF0aC5zcXJ0KG1baSozK2ldLW1baiozK2pdLW1bayozK2tdICsgMS4wKTtcclxuICAgICAgICBvdXRbaV0gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xyXG4gICAgICAgIG91dFszXSA9IChtW2oqMytrXSAtIG1bayozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtqXSA9IChtW2oqMytpXSArIG1baSozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtrXSA9IChtW2sqMytpXSArIG1baSozK2tdKSAqIGZSb290O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBxdWF0OyIsIi8vIFNhbXBsZXIgY2xpcCBpcyBlc3BlY2lhbGx5IGZvciB0aGUgYW5pbWF0aW9uIHNhbXBsZXIgaW4gZ2xURlxyXG4vLyBVc2UgVHlwZWQgQXJyYXkgY2FuIHJlZHVjZSBhIGxvdCBvZiBoZWFwIG1lbW9yeVxyXG5cclxuaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLy8gbGVycCBmdW5jdGlvbiB3aXRoIG9mZnNldCBpbiBsYXJnZSBhcnJheVxyXG5mdW5jdGlvbiB2ZWMzbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgdmFyIGF4ID0gYVtvYV07XHJcbiAgICB2YXIgYXkgPSBhW29hICsgMV07XHJcbiAgICB2YXIgYXogPSBhW29hICsgMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYltvYl0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYltvYiArIDFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbb2IgKyAyXSAtIGF6KTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBxdWF0U2xlcnAob3V0LCBhLCBiLCB0LCBvYSwgb2IpIHtcclxuICAgIC8vIGJlbmNobWFya3M6XHJcbiAgICAvLyAgICBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXNsZXJwLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciBheCA9IGFbMCArIG9hXSwgYXkgPSBhWzEgKyBvYV0sIGF6ID0gYVsyICsgb2FdLCBhdyA9IGFbMyArIG9hXSxcclxuICAgICAgICBieCA9IGJbMCArIG9iXSwgYnkgPSBiWzEgKyBvYl0sIGJ6ID0gYlsyICsgb2JdLCBidyA9IGJbMyArIG9iXTtcclxuXHJcbiAgICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7XHJcblxyXG4gICAgLy8gY2FsYyBjb3NpbmVcclxuICAgIGNvc29tID0gYXggKiBieCArIGF5ICogYnkgKyBheiAqIGJ6ICsgYXcgKiBidztcclxuICAgIC8vIGFkanVzdCBzaWducyAoaWYgbmVjZXNzYXJ5KVxyXG4gICAgaWYgKGNvc29tIDwgMC4wKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCgxLjAgLSBjb3NvbSkgPiAwLjAwMDAwMSkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vICdmcm9tJyBhbmQgJ3RvJyBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTYW1wbGVyVHJhY2sgbWFuYWdlcyBgcG9zaXRpb25gLCBgcm90YXRpb25gLCBgc2NhbGVgIHRyYWNrcyBpbiBhbmltYXRpb24gb2Ygc2luZ2xlIHNjZW5lIG5vZGUuXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdIFRyYWNrIG5hbWVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtvcHRzLnRhcmdldF0gVGFyZ2V0IG5vZGUncyB0cmFuc2Zvcm0gd2lsbCB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcclxuICovXHJcbnZhciBTYW1wbGVyVHJhY2sgPSBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldCB8fCBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9zaXRpb24gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yb3RhdGlvbiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcclxuXHJcbiAgICB0aGlzLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IG51bGwsXHJcbiAgICAgICAgcG9zaXRpb246IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIga2V5ID0gLTE7XHJcbiAgICAvLyBPbmx5IG9uZSBmcmFtZVxyXG4gICAgaWYgKGxlbiA9PT0gMSkge1xyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0LmNvcHkodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENsYW1wXHJcbiAgICBlbHNlIGlmICh0aW1lIDw9IGNoYW5uZWxzLnRpbWVbMF0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVswXTtcclxuICAgICAgICBrZXkgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGltZSA+PSBjaGFubmVscy50aW1lW2xlbiAtIDFdKSB7XHJcbiAgICAgICAgdGltZSA9IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV07XHJcbiAgICAgICAga2V5ID0gbGVuIC0gMjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aW1lIDwgdGhpcy5fY2FjaGVUaW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBzID0gTWF0aC5taW4obGVuIC0gMSwgdGhpcy5fY2FjaGVLZXkgKyAxKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbHMudGltZVtpIC0gMV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2ldID4gdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGkgLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2FjaGVLZXk7IGkgPCBsZW4gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpICsgMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0ga2V5O1xyXG4gICAgICAgIHZhciBlbmQgPSBrZXkgKyAxO1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbZW5kXTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gcmFuZ2UgPT09IDAgPyAwIDogKHRpbWUgLSBzdGFydFRpbWUpIC8gcmFuZ2U7XHJcblxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0U2xlcnAodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIGNoYW5uZWxzLnJvdGF0aW9uLCBwZXJjZW50LCBzdGFydCAqIDQsIGVuZCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIExvb3AgaGFuZGxpbmdcclxuICAgIGlmIChrZXkgPT09IGxlbiAtIDIpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSB0cmFuc2Zvcm0gb2YgdGFyZ2V0IG5vZGUgbWFudWFsbHlcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUudXBkYXRlVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRhcmdldCBwcm9wIGlmIGhhdmUgZGF0YS5cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zaXRpb24uc2V0QXJyYXkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5yb3RhdGlvbi5zZXRBcnJheSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNjYWxlLnNldEFycmF5KHRoaXMuc2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFubmVscy50aW1lW3RoaXMuY2hhbm5lbHMudGltZS5sZW5ndGggLSAxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0U3ViVHJhY2sgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKSB7XHJcblxyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG4gICAgdmFyIG1pblRpbWUgPSB0aGlzLmNoYW5uZWxzLnRpbWVbMF07XHJcbiAgICBzdGFydFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG4gICAgZW5kVGltZSA9IE1hdGgubWluKE1hdGgubWF4KGVuZFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIHZhciByYW5nZVN0YXJ0ID0gdGhpcy5fZmluZFJhbmdlKHN0YXJ0VGltZSk7XHJcbiAgICB2YXIgcmFuZ2VFbmQgPSB0aGlzLl9maW5kUmFuZ2UoZW5kVGltZSk7XHJcblxyXG4gICAgdmFyIGNvdW50ID0gcmFuZ2VFbmRbMF0gLSByYW5nZVN0YXJ0WzBdICsgMTtcclxuICAgIGlmIChyYW5nZVN0YXJ0WzFdID09PSAwICYmIHJhbmdlRW5kWzFdID09PSAwKSB7XHJcbiAgICAgICAgY291bnQgLT0gMTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiA0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnRpbWUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWUgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50KTtcclxuICAgIH1cclxuICAgIC8vIENsaXAgYXQgdGhlIHN0YXJ0XHJcbiAgICB0aGlzLnNldFRpbWUoc3RhcnRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbMF0gPSAwO1xyXG4gICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblszXSA9IHRoaXMucm90YXRpb25bM107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjb3VudC0xOyBpKyspIHtcclxuICAgICAgICB2YXIgaTI7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgaTIgPSByYW5nZVN0YXJ0WzBdICsgaTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpICogNCArIGpdID0gdGhpcy5jaGFubmVscy5yb3RhdGlvbltpMiAqIDQgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5wb3NpdGlvbltpMiAqIDMgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5zY2FsZVtpMiAqIDMgKyBqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy50aW1lW2ldID0gdGhpcy5jaGFubmVscy50aW1lW2kyXSAtIHN0YXJ0VGltZTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgM10gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIDNdO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgZW5kXHJcbiAgICB0aGlzLnNldFRpbWUoZW5kVGltZSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgaV0gPSB0aGlzLnJvdGF0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucG9zaXRpb25bKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnBvc2l0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMuc2NhbGVbKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnNjYWxlW2ldO1xyXG4gICAgfVxyXG4gICAgc3ViQ2xpcC5jaGFubmVscy50aW1lWyhjb3VudCAtIDEpXSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIDNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICAvLyBUT0RPIHNldCBiYWNrID9cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuX2ZpbmRSYW5nZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgdmFyIGxlbiA9IGNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgdmFyIHN0YXJ0ID0gLTE7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpKzFdID4gdGltZSkge1xyXG4gICAgICAgICAgICBzdGFydCA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHBlcmNlbnQgPSAwO1xyXG4gICAgaWYgKHN0YXJ0ID49IDApIHtcclxuICAgICAgICB2YXIgc3RhcnRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydF07XHJcbiAgICAgICAgdmFyIGVuZFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0KzFdO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gKHRpbWUtc3RhcnRUaW1lKSAvIChlbmRUaW1lLXN0YXJ0VGltZSk7XHJcbiAgICB9XHJcbiAgICAvLyBQZXJjZW50IFswLCAxKVxyXG4gICAgcmV0dXJuIFtzdGFydCwgcGVyY2VudF07XHJcbn07XHJcblxyXG4vKipcclxuICogMUQgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uICh0MSwgdDIsIHcpIHtcclxuICAgIHZlYzMubGVycCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24sIHcpO1xyXG4gICAgdmVjMy5sZXJwKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSwgdyk7XHJcbiAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdyk7XHJcbn07XHJcbi8qKlxyXG4gKiAyRCBibGVuZGluZyBiZXR3ZWVuIHRocmVlIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmJsZW5kMkQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHExID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHZhciBxMiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHQxLCB0MiwgdDMsIGYsIGcpIHtcclxuICAgICAgICB2YXIgYSA9IDEgLSBmIC0gZztcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblswXSA9IHQxLnBvc2l0aW9uWzBdICogYSArIHQyLnBvc2l0aW9uWzBdICogZiArIHQzLnBvc2l0aW9uWzBdICogZztcclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzFdID0gdDEucG9zaXRpb25bMV0gKiBhICsgdDIucG9zaXRpb25bMV0gKiBmICsgdDMucG9zaXRpb25bMV0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMl0gPSB0MS5wb3NpdGlvblsyXSAqIGEgKyB0Mi5wb3NpdGlvblsyXSAqIGYgKyB0My5wb3NpdGlvblsyXSAqIGc7XHJcblxyXG4gICAgICAgIHRoaXMuc2NhbGVbMF0gPSB0MS5zY2FsZVswXSAqIGEgKyB0Mi5zY2FsZVswXSAqIGYgKyB0My5zY2FsZVswXSAqIGc7XHJcbiAgICAgICAgdGhpcy5zY2FsZVsxXSA9IHQxLnNjYWxlWzFdICogYSArIHQyLnNjYWxlWzFdICogZiArIHQzLnNjYWxlWzFdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzJdID0gdDEuc2NhbGVbMl0gKiBhICsgdDIuc2NhbGVbMl0gKiBmICsgdDMuc2NhbGVbMl0gKiBnO1xyXG5cclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiMjA1NDAzKHY9dnMuODUpLmFzcHhcclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21pY3Jvc29mdC5kaXJlY3R4X3Nkay5xdWF0ZXJuaW9uLnhtcXVhdGVybmlvbmJhcnljZW50cmljKHY9dnMuODUpLmFzcHhcclxuICAgICAgICB2YXIgcyA9IGYgKyBnO1xyXG4gICAgICAgIGlmIChzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHExLCB0MS5yb3RhdGlvbiwgdDIucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHEyLCB0MS5yb3RhdGlvbiwgdDMucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHExLCBxMiwgZyAvIHMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmFkZGl0aXZlQmxlbmQgPSBmdW5jdGlvbiAodDEsIHQyKSB7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24pO1xyXG4gICAgdmVjMy5hZGQodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlKTtcclxuICAgIHF1YXQubXVsdGlwbHkodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuLyoqXHJcbiAqIFN1YnRyYWN0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuc3ViKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLnN1Yih0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5pbnZlcnQodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24pO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgU2FtcGxlclRyYWNrXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdHJhY2sgPSBTYW1wbGVyVHJhY2sucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICB0cmFjay5jaGFubmVscyA9IHtcclxuICAgICAgICB0aW1lOiB0aGlzLmNoYW5uZWxzLnRpbWUgfHwgbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogdGhpcy5jaGFubmVscy5wb3NpdGlvbiB8fCBudWxsLFxyXG4gICAgICAgIHJvdGF0aW9uOiB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IHRoaXMuY2hhbm5lbHMuc2NhbGUgfHwgbnVsbFxyXG4gICAgfTtcclxuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICBxdWF0LmNvcHkodHJhY2sucm90YXRpb24sIHRoaXMucm90YXRpb24pO1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnNjYWxlLCB0aGlzLnNjYWxlKTtcclxuXHJcbiAgICB0cmFjay50YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgIHRyYWNrLnVwZGF0ZVRhcmdldCgpO1xyXG5cclxuICAgIHJldHVybiB0cmFjaztcclxuXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTYW1wbGVyVHJhY2s7XHJcbiIsIi8qKlxyXG4gKiBFeHRlbmQgYSBzdWIgY2xhc3MgZnJvbSBiYXNlIGNsYXNzXHJcbiAqIEBwYXJhbSB7b2JqZWN0fEZ1bmN0aW9ufSBtYWtlRGVmYXVsdE9wdCBkZWZhdWx0IG9wdGlvbiBvZiB0aGlzIHN1YiBjbGFzcywgbWV0aG9kIG9mIHRoZSBzdWIgY2FuIHVzZSB0aGlzLnh4eCB0byBhY2Nlc3MgdGhpcyBvcHRpb25cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVdIEluaXRpYWxpemUgYWZ0ZXIgdGhlIHN1YiBjbGFzcyBpcyBpbnN0YW50aWF0ZWRcclxuICogQHBhcmFtIHtPYmplY3R9IFtwcm90b10gUHJvdG90eXBlIG1ldGhvZHMvcHJvcGVydGllcyBvZiB0aGUgc3ViIGNsYXNzXHJcbiAqIEBtZW1iZXJPZiBjbGF5LmNvcmUubWl4aW4uZXh0ZW5kXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gZGVyaXZlKG1ha2VEZWZhdWx0T3B0LCBpbml0aWFsaXplLypvcHRpb25hbCovLCBwcm90by8qb3B0aW9uYWwqLykge1xyXG5cclxuICAgIGlmICh0eXBlb2YgaW5pdGlhbGl6ZSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHByb3RvID0gaW5pdGlhbGl6ZTtcclxuICAgICAgICBpbml0aWFsaXplID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgX3N1cGVyID0gdGhpcztcclxuXHJcbiAgICB2YXIgcHJvcExpc3Q7XHJcbiAgICBpZiAoIShtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xyXG4gICAgICAgIC8vIE9wdGltaXplIHRoZSBwcm9wZXJ0eSBpdGVyYXRlIGlmIGl0IGhhdmUgYmVlbiBmaXhlZFxyXG4gICAgICAgIHByb3BMaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gbWFrZURlZmF1bHRPcHQpIHtcclxuICAgICAgICAgICAgaWYgKG1ha2VEZWZhdWx0T3B0Lmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcExpc3QucHVzaChwcm9wTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHN1YiA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgLy8gY2FsbCBzdXBlciBjb25zdHJ1Y3RvclxyXG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAvLyBJbnZva2UgbWFrZURlZmF1bHRPcHQgZWFjaCB0aW1lIGlmIGl0IGlzIGEgZnVuY3Rpb24sIFNvIHdlIGNhbiBtYWtlIHN1cmUgZWFjaFxyXG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIHNoYXJlZCBieSBtdXRpcGxlIGluc3RhbmNlc1xyXG4gICAgICAgICAgICBleHRlbmQodGhpcywgbWFrZURlZmF1bHRPcHQuY2FsbCh0aGlzLCBvcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBleHRlbmRXaXRoUHJvcExpc3QodGhpcywgbWFrZURlZmF1bHRPcHQsIHByb3BMaXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBzdWIpIHtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgb2YgaW5oZXJpdFxyXG4gICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJzID0gc3ViLl9faW5pdGlhbGl6ZXJzX187XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBzYXZlIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICBzdWIuX19zdXBlcl9fID0gX3N1cGVyO1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgdGhlIHN1cGVyIGNvbnN0cnVjdG9yIGlzIGNhbGxlZFxyXG4gICAgaWYgKCFfc3VwZXIuX19pbml0aWFsaXplcnNfXykge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gX3N1cGVyLl9faW5pdGlhbGl6ZXJzX18uc2xpY2UoKTtcclxuICAgIH1cclxuICAgIGlmIChpbml0aWFsaXplKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18ucHVzaChpbml0aWFsaXplKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCkge307XHJcbiAgICBDdG9yLnByb3RvdHlwZSA9IF9zdXBlci5wcm90b3R5cGU7XHJcbiAgICBzdWIucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuICAgIHN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWI7XHJcbiAgICBleHRlbmQoc3ViLnByb3RvdHlwZSwgcHJvdG8pO1xyXG5cclxuICAgIC8vIGV4dGVuZCB0aGUgZGVyaXZlIG1ldGhvZCBhcyBhIHN0YXRpYyBtZXRob2Q7XHJcbiAgICBzdWIuZXh0ZW5kID0gX3N1cGVyLmV4dGVuZDtcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIHN1Yi5kZXJpdmUgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIHJldHVybiBzdWI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kV2l0aFByb3BMaXN0KHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQG1peGluXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblxyXG4gICAgZXh0ZW5kOiBkZXJpdmUsXHJcblxyXG4gICAgLy8gREVQQ1JBVEVEXHJcbiAgICBkZXJpdmU6IGRlcml2ZVxyXG59O1xyXG4iLCJmdW5jdGlvbiBIYW5kbGVyKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG59XHJcbi8qKlxyXG4gKiBAbWl4aW5cclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIG5vdGlmaWVyID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgdHJpZ2dlcjogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19oYW5kbGVyc19fJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX19oYW5kbGVyc19fLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoZGxzID0gdGhpcy5fX2hhbmRsZXJzX19bbmFtZV07XHJcbiAgICAgICAgdmFyIGwgPSBoZGxzLmxlbmd0aCwgaSA9IC0xLCBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIC8vIE9wdGltaXplIGFkdmlzZSBmcm9tIGJhY2tib25lXHJcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmFwcGx5KGhkbHNbaV0uY29udGV4dCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuICAgICAgICBpZiAoIWhhbmRsZXJzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXJzW25hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXMobmFtZSwgYWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0IHx8IHRoaXMpO1xyXG4gICAgICAgIGhhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50LCBldmVudCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIG9uY2UgYW5kIHRoZW4gcmVtb3ZlZFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbmNlOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xyXG4gICAgICAgICAgICBzZWxmLm9mZihuYW1lLCB3cmFwcGVyKTtcclxuICAgICAgICAgICAgYWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIHdyYXBwZXIsIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2JlZm9yZScgKyBuYW1lKVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBiZWZvcmU6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdiZWZvcmUnICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2FmdGVyJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGFmdGVyOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5hbWUgPSAnYWZ0ZXInICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdzdWNjZXNzJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uY2UoJ3N1Y2Nlc3MnLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdlcnJvcicpXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBlcnJvcjogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnZXJyb3InLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lclxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb2ZmOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuXHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuXHJcbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdmFyIGhkbHMgPSBoYW5kbGVyc1tuYW1lXTtcclxuICAgICAgICAgICAgdmFyIHJldGFpbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uICYmIGhkbHNbaV0uYWN0aW9uICE9PSBhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRhaW5zLnB1c2goaGRsc1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSByZXRhaW5zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcmVnaXN0ZXJlZCB0aGUgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259ICBhY3Rpb25cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhczogZnVuY3Rpb24obmFtZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX187XHJcblxyXG4gICAgICAgIGlmICghIGhhbmRsZXJzIHx8XHJcbiAgICAgICAgICAgICEgaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGRscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaGRsc1tpXS5hY3Rpb24gPT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBub3RpZmllcjsiLCJ2YXIgZ3VpZCA9IDA7XHJcblxyXG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcclxudmFyIG5hdGl2ZUZvckVhY2ggPSBBcnJheVByb3RvLmZvckVhY2g7XHJcblxyXG4vKipcclxuICogVXRpbCBmdW5jdGlvbnNcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUudXRpbFxyXG4gKi9cclxudmFyIHV0aWwgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBHVUlEXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZ2VuR1VJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiArK2d1aWQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWxhdGl2ZSBwYXRoIHRvIGFic29sdXRlIHBhdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBiYXNlUGF0aFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIHJlbGF0aXZlMmFic29sdXRlOiBmdW5jdGlvbiAocGF0aCwgYmFzZVBhdGgpIHtcclxuICAgICAgICBpZiAoIWJhc2VQYXRoIHx8IHBhdGgubWF0Y2goL15cXC8vKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhdGhQYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgYmFzZVBhdGhQYXJ0cyA9IGJhc2VQYXRoLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgIHZhciBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIHdoaWxlKGl0ZW0gPT09ICcuJyB8fCBpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlUGF0aFBhcnRzLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGhQYXJ0cy5zaGlmdCgpO1xyXG4gICAgICAgICAgICBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYmFzZVBhdGhQYXJ0cy5qb2luKCcvJykgKyAnLycgKyBwYXRoUGFydHMuam9pbignLycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCB0YXJnZXQgd2l0aCBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGV4dGVuZDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHNvdXJjZVtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0czogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGxpc3QgdG8gYXZvaWQgZm9yLi5pbi4uIGl0ZXJhdGlvbi5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHByb3BMaXN0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB0byB0YXJnZXQgaWYgbm90IGV4aXN0LiBXaXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0c1dpdGhQcm9wTGlzdDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0W3Byb3BOYW1lXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gb2JqXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZWFjaDogZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIShvYmogJiYgaXRlcmF0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iai5mb3JFYWNoICYmIG9iai5mb3JFYWNoID09PSBuYXRpdmVGb3JFYWNoKSB7XHJcbiAgICAgICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqID09PSBPYmplY3Qob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSA/XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgYXJyYXkgbGlrZSwgd2hpY2ggaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7fSAgb2JqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGlzQXJyYXlMaWtlOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5sZW5ndGggPT09ICsgb2JqLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7fSBvYmpcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGlmICghdXRpbC5pc09iamVjdChvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHV0aWwuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5TGlrZShvYmopKSB7IC8vIGlzIHR5cGVkIGFycmF5XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKG9iai5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0W2ldID0gb2JqW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5leHRlbmQoe30sIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXRpbDtcclxuIiwiaW1wb3J0IGV4dGVuZE1peGluIGZyb20gJy4vbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyTWl4aW4gZnJvbSAnLi9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbCc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBvZiBhbGwgb2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbnZhciBCYXNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9fdWlkX18gPSB1dGlsLmdlbkdVSUQoKTtcclxufTtcclxuXHJcbkJhc2UuX19pbml0aWFsaXplcnNfXyA9IFtcclxuICAgIGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgdXRpbC5leHRlbmQodGhpcywgb3B0cyk7XHJcbiAgICB9XHJcbl07XHJcblxyXG51dGlsLmV4dGVuZChCYXNlLCBleHRlbmRNaXhpbik7XHJcbnV0aWwuZXh0ZW5kKEJhc2UucHJvdG90eXBlLCBub3RpZmllck1peGluKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2U7XHJcbiIsImZ1bmN0aW9uIGdldChvcHRpb25zKSB7XHJcblxyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG5cclxuICAgIHhoci5vcGVuKCdnZXQnLCBvcHRpb25zLnVybCk7XHJcbiAgICAvLyBXaXRoIHJlc3BvbnNlIHR5cGUgc2V0IGJyb3dzZXIgY2FuIGdldCBhbmQgcHV0IGJpbmFyeSBkYXRhXHJcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9TZW5kaW5nX2FuZF9SZWNlaXZpbmdfQmluYXJ5X0RhdGFcclxuICAgIC8vIERlZmF1bHQgaXMgdGV4dCwgYW5kIGl0IGNhbiBiZSBzZXRcclxuICAgIC8vIGFycmF5YnVmZmVyLCBibG9iLCBkb2N1bWVudCwganNvbiwgdGV4dFxyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcclxuXHJcbiAgICBpZiAob3B0aW9ucy5vbnByb2dyZXNzKSB7XHJcbiAgICAgICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdFxyXG4gICAgICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IGUubG9hZGVkIC8gZS50b3RhbDtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhwZXJjZW50LCBlLmxvYWRlZCwgZS50b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9ucHJvZ3Jlc3MobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSA0MDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmVycm9yICYmIG9wdGlvbnMub25lcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQgJiYgb3B0aW9ucy5vbmxvYWQoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdGlvbnMub25lcnJvcikge1xyXG4gICAgICAgIHhoci5vbmVycm9yID0gb3B0aW9ucy5vbmVycm9yO1xyXG4gICAgfVxyXG4gICAgeGhyLnNlbmQobnVsbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGdldDogZ2V0XHJcbn07XHJcbiIsImltcG9ydCByZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XHJcblxyXG52YXIgc3VwcG9ydFdlYkdMO1xyXG5cclxudmFyIHZlbmRvciA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIElmIHN1cHBvcnQgV2ViR0xcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcbnZlbmRvci5zdXBwb3J0V2ViR0wgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoc3VwcG9ydFdlYkdMID09IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcclxuICAgICAgICAgICAgaWYgKCFnbCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgc3VwcG9ydFdlYkdMID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBzdXBwb3J0V2ViR0w7XHJcbn07XHJcblxyXG52ZW5kb3IuSW50OEFycmF5ID0gdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDhBcnJheTtcclxuXHJcbnZlbmRvci5VaW50OEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQxNkFycmF5ID0gdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogVWludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDMyQXJyYXkgPSB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MzJBcnJheTtcclxuXHJcbnZlbmRvci5JbnQxNkFycmF5ID0gdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBJbnQxNkFycmF5O1xyXG5cclxudmVuZG9yLkZsb2F0MzJBcnJheSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBGbG9hdDMyQXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQ2NEFycmF5ID0gdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0NjRBcnJheTtcclxuXHJcbnZhciBnID0ge307XHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IHdpbmRvdztcclxufVxyXG5lbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IGdsb2JhbDtcclxufVxyXG5cclxuXHJcbnZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnLnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGcud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBmdW5jdGlvbiAoZnVuYyl7IHNldFRpbWVvdXQoZnVuYywgMTYpOyB9O1xyXG5cclxudmVuZG9yLmNyZWF0ZUNhbnZhcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxufTtcclxuXHJcbnZlbmRvci5jcmVhdGVJbWFnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBuZXcgZy5JbWFnZSgpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlcXVlc3QgPSB7XHJcbiAgICBnZXQ6IHJlcXVlc3QuZ2V0XHJcbn07XHJcblxyXG52ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpIHtcclxuICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZG9tLCB0eXBlLCBmdW5jKSB7XHJcbiAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHZlbmRvcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgQW5pbWF0b3IgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBbmltYXRpb24gaXMgZ2xvYmFsIHRpbWVsaW5lIHRoYXQgc2NoZWR1bGUgYWxsIGNsaXBzLiBlYWNoIGZyYW1lIGFuaW1hdGlvbiB3aWxsIHNldCB0aGUgdGltZSBvZiBjbGlwcyB0byBjdXJyZW50IGFuZCB1cGRhdGUgdGhlIHN0YXRlcyBvZiBjbGlwc1xyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UaW1lbGluZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgYW5pbWF0aW9uID0gbmV3IGNsYXkuVGltZWxpbmUoKTtcclxuICogdmFyIG5vZGUgPSBuZXcgY2xheS5Ob2RlKCk7XHJcbiAqIGFuaW1hdGlvbi5hbmltYXRlKG5vZGUucG9zaXRpb24pXHJcbiAqICAgICAud2hlbigxMDAwLCB7XHJcbiAqICAgICAgICAgeDogNTAwLFxyXG4gKiAgICAgICAgIHk6IDUwMFxyXG4gKiAgICAgfSlcclxuICogICAgIC53aGVuKDIwMDAsIHtcclxuICogICAgICAgICB4OiAxMDAsXHJcbiAqICAgICAgICAgeTogMTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMzAwMCwge1xyXG4gKiAgICAgICAgIHo6IDEwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLnN0YXJ0KCdzcGxpbmUnKTtcclxuICovXHJcbnZhciBUaW1lbGluZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGltZWxpbmUjICove1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHN0YWdlIGlzIGFuIG9iamVjdCB3aXRoIHJlbmRlciBtZXRob2QsIGVhY2ggZnJhbWUgaWYgdGhlcmUgZXhpc3RzIGFueSBhbmltYXRpbmcgY2xpcHMsIHN0YWdlLnJlbmRlciB3aWxsIGJlIGNhbGxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3RhZ2U6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIF9ydW5uaW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3RpbWU6IDAsXHJcblxyXG4gICAgICAgIF9wYXVzZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcGF1c2VkVGltZTogMFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRpbWVsaW5lLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxyXG4gICAgICovXHJcbiAgICBhZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBjbGlwXHJcbiAgICAgKi9cclxuICAgIGFkZENsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzLmluZGV4T2YoY2xpcCkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZWRUaW1lO1xyXG4gICAgICAgIHZhciBkZWx0YSA9IHRpbWUgLSB0aGlzLl90aW1lO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IHRoaXMuX2NsaXBzO1xyXG4gICAgICAgIHZhciBsZW4gPSBjbGlwcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBkZWZlcnJlZEV2ZW50cyA9IFtdO1xyXG4gICAgICAgIHZhciBkZWZlcnJlZENsaXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2xpcCA9IGNsaXBzW2ldO1xyXG4gICAgICAgICAgICB2YXIgZSA9IGNsaXAuc3RlcCh0aW1lLCBkZWx0YSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBUaHJvdyBvdXQgdGhlIGV2ZW50cyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlclxyXG4gICAgICAgICAgICAvLyBzdGFnZS5yZW5kZXIsIGxpa2UgZmluaXNoXHJcbiAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZEV2ZW50cy5wdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWRDbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGZpbmlzaGVkIGNsaXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGNsaXBzW2ldLl9uZWVkc1JlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgY2xpcHNbaV0gPSBjbGlwc1tsZW4tMV07XHJcbiAgICAgICAgICAgICAgICBjbGlwcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZW4gPSBkZWZlcnJlZEV2ZW50cy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBkZWZlcnJlZENsaXBzW2ldLmZpcmUoZGVmZXJyZWRFdmVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGltZSA9IHRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignZnJhbWUnLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YWdlICYmIHRoaXMuc3RhZ2UucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UucmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3RpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICB0aGlzLl9wYXVzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAoKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9ydW5uaW5nKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghc2VsZi5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIHJ1bm5pbmcgYW5pbWF0aW9uXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VcclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZVN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkVGltZSArPSBEYXRlLm5vdygpIC0gdGhpcy5fcGF1c2VTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGFuIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb25zLmxvb3BdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuZ2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNldHRlcl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5pbnRlcnBvbGF0ZXJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBhbmltYXRvciA9IG5ldyBBbmltYXRvcihcclxuICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICBvcHRpb25zLmxvb3AsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZ2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLnNldHRlcixcclxuICAgICAgICAgICAgb3B0aW9ucy5pbnRlcnBvbGF0ZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGFuaW1hdG9yLmFuaW1hdGlvbiA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuLi9UaW1lbGluZSc7XHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lOyIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEFuaW1hdGlvbiBjbGlwIHRoYXQgbWFuYWdlIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtBcnJheS48Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrPn0gW29wdHMudHJhY2tzXVxyXG4gKi9cclxudmFyIFRyYWNrQ2xpcCA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgQ2xpcC5jYWxsKHRoaXMsIG9wdHMpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmFja3MgPSBvcHRzLnRyYWNrcyB8fCBbXTtcclxuXHJcbiAgICB0aGlzLmNhbGNMaWZlRnJvbVRyYWNrcygpO1xyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xpcC5wcm90b3R5cGUpO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYWNrQ2xpcDtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XHJcblxyXG4gICAgdmFyIHJldCA9IENsaXAucHJvdG90eXBlLnN0ZXAuY2FsbCh0aGlzLCB0aW1lLCBkVGltZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcclxuICAgICAgICAvLyBUT0RPIGxpZmUgbWF5IGJlIGNoYW5nZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JhbmdlKSB7XHJcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9yYW5nZVswXSArIHRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmFuZ2VcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0UmFuZ2UgPSBmdW5jdGlvbiAocmFuZ2UpIHtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlO1xyXG4gICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgcmFuZ2VbMV0gPSBNYXRoLm1pbihyYW5nZVsxXSwgdGhpcy5saWZlKTtcclxuICAgICAgICByYW5nZVswXSA9IE1hdGgubWluKHJhbmdlWzBdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHRoaXMubGlmZSA9IChyYW5nZVsxXSAtIHJhbmdlWzBdKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy50cmFja3NbaV0uc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY2FsY0xpZmVGcm9tVHJhY2tzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5saWZlID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmxpZmUgPSBNYXRoLm1heCh0aGlzLmxpZmUsIHRoaXMudHJhY2tzW2ldLmdldE1heFRpbWUoKSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmFkZFRyYWNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB0aGlzLnRyYWNrcy5wdXNoKHRyYWNrKTtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnJlbW92ZVRhcmNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB2YXIgaWR4ID0gdGhpcy50cmFja3MuaW5kZXhPZih0cmFjayk7XHJcbiAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICB0aGlzLnRyYWNrcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb29wXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH1cclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuZ2V0U3ViQ2xpcCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlzTG9vcCkge1xyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ViVHJhY2sgPSB0aGlzLnRyYWNrc1tpXS5nZXRTdWJUcmFjayhzdGFydFRpbWUsIGVuZFRpbWUpO1xyXG4gICAgICAgIHN1YkNsaXAuYWRkVHJhY2soc3ViVHJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0xvb3AgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1YkNsaXAuc2V0TG9vcChpc0xvb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcblxyXG4gICAgcmV0dXJuIHN1YkNsaXA7XHJcbn07XHJcblxyXG4vKipcclxuICogMWQgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgdykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmJsZW5kMUQoYzEsIGMyLCB3KTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5hZGRpdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnN1YnRyYWN0aXZlQmxlbmQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuc3VidHJhY3RpdmVCbGVuZChjMSwgYzIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGZyb20gdGhyZWUgc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDNcclxuICogQHBhcmFtICB7bnVtYmVyfSBmXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZ1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDJEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgY2xpcDMsIGYsIGcpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMyA9IGNsaXAzLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQyRChjMSwgYzIsIGMzLCBmLCBnKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IFNSVCBvZiBhbGwgam9pbnRzIGNsaXBzIGZyb20gYW5vdGhlciBUcmFja0NsaXBcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzVHJhY2sgPSBjbGlwLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdFRyYWNrID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHZlYzMuY29weSh0VHJhY2sucG9zaXRpb24sIHNUcmFjay5wb3NpdGlvbik7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5zY2FsZSwgc1RyYWNrLnNjYWxlKTtcclxuICAgICAgICBxdWF0LmNvcHkodFRyYWNrLnJvdGF0aW9uLCBzVHJhY2sucm90YXRpb24pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjbGlwLmFkZFRyYWNrKHRoaXMudHJhY2tzW2ldLmNsb25lKCkpO1xyXG4gICAgfVxyXG4gICAgY2xpcC5saWZlID0gdGhpcy5saWZlO1xyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUcmFja0NsaXA7XHJcbiIsInZhciBFWFRFTlNJT05fTElTVCA9IFtcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicsXHJcbiAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICdPRVNfdmVydGV4X2FycmF5X29iamVjdCcsXHJcbiAgICAnT0VTX2VsZW1lbnRfaW5kZXhfdWludCcsXHJcbiAgICAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnLFxyXG4gICAgJ1dFQkdMX2RlcHRoX3RleHR1cmUnLFxyXG4gICAgJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycsXHJcbiAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcsXHJcbiAgICAnV0VCR0xfZHJhd19idWZmZXJzJyxcclxuICAgICdFWFRfZnJhZ19kZXB0aCcsXHJcbiAgICAnRVhUX3NSR0InXHJcbl07XHJcblxyXG52YXIgUEFSQU1FVEVSX05BTUVTID0gW1xyXG4gICAgJ01BWF9URVhUVVJFX1NJWkUnLFxyXG4gICAgJ01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUnXHJcbl07XHJcblxyXG5mdW5jdGlvbiBHTEluZm8oX2dsKSB7XHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9O1xyXG4gICAgdmFyIHBhcmFtZXRlcnMgPSB7fTtcclxuXHJcbiAgICAvLyBHZXQgd2ViZ2wgZXh0ZW5zaW9uXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEVYVEVOU0lPTl9MSVNULmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGV4dE5hbWUgPSBFWFRFTlNJT05fTElTVFtpXTtcclxuICAgICAgICBjcmVhdGVFeHRlbnNpb24oZXh0TmFtZSk7XHJcbiAgICB9XHJcbiAgICAvLyBHZXQgcGFyYW1ldGVyc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBQQVJBTUVURVJfTkFNRVMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IFBBUkFNRVRFUl9OQU1FU1tpXTtcclxuICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gX2dsLmdldFBhcmFtZXRlcihfZ2xbbmFtZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0RXh0ZW5zaW9uID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBpZiAoIShuYW1lIGluIGV4dGVuc2lvbnMpKSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZUV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnNbbmFtZV07XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRNYXhKb2ludE51bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gMTU7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKF9nbC5nZXRFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgdmFyIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnNbbmFtZV0gPSBleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTEluZm87XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5nbGVudW1cclxuICogQHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8xLjAvIzUuMTRcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8qIENsZWFyQnVmZmVyTWFzayAqL1xyXG4gICAgREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDogMHgwMDAwMDEwMCxcclxuICAgIFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA6IDB4MDAwMDA0MDAsXHJcbiAgICBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDA0MDAwLFxyXG5cclxuICAgIC8qIEJlZ2luTW9kZSAqL1xyXG4gICAgUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAwLFxyXG4gICAgTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAxLFxyXG4gICAgTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAyLFxyXG4gICAgTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAzLFxyXG4gICAgVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDA0LFxyXG4gICAgVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDogMHgwMDA1LFxyXG4gICAgVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgIDogMHgwMDA2LFxyXG5cclxuICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi9cclxuICAgIC8qICAgICAgTkVWRVIgKi9cclxuICAgIC8qICAgICAgTEVTUyAqL1xyXG4gICAgLyogICAgICBFUVVBTCAqL1xyXG4gICAgLyogICAgICBMRVFVQUwgKi9cclxuICAgIC8qICAgICAgR1JFQVRFUiAqL1xyXG4gICAgLyogICAgICBOT1RFUVVBTCAqL1xyXG4gICAgLyogICAgICBHRVFVQUwgKi9cclxuICAgIC8qICAgICAgQUxXQVlTICovXHJcblxyXG4gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovXHJcbiAgICBaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG4gICAgT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSxcclxuICAgIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMCxcclxuICAgIE9ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICA6IDB4MDMwMSxcclxuICAgIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMixcclxuICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA6IDB4MDMwMyxcclxuICAgIERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwNCxcclxuICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA6IDB4MDMwNSxcclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICAvKiAgICAgIE9ORSAqL1xyXG4gICAgRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA2LFxyXG4gICAgT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDogMHgwMzA3LFxyXG4gICAgU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgIDogMHgwMzA4LFxyXG4gICAgLyogICAgICBTUkNfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBEU1RfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqL1xyXG5cclxuICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqL1xyXG4gICAgRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MDA2LFxyXG4gICAgQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDogMHg4MDA5LFxyXG4gICAgQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgIDogMHg4MDA5LCAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovXHJcbiAgICBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgOiAweDg4M0QsXHJcblxyXG4gICAgLyogQmxlbmRTdWJ0cmFjdCAqL1xyXG4gICAgRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgIDogMHg4MDBBLFxyXG4gICAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgIDogMHg4MDBCLFxyXG5cclxuICAgIC8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqL1xyXG4gICAgQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM4LFxyXG4gICAgQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM5LFxyXG4gICAgQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENBLFxyXG4gICAgQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENCLFxyXG4gICAgQ09OU1RBTlRfQ09MT1IgICAgICAgICAgICAgICAgIDogMHg4MDAxLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgIDogMHg4MDAyLFxyXG4gICAgQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDogMHg4MDAzLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICAgICAgIDogMHg4MDA0LFxyXG4gICAgQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgIDogMHg4MDA1LFxyXG5cclxuICAgIC8qIEJ1ZmZlciBPYmplY3RzICovXHJcbiAgICBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgOiAweDg4OTIsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgOiAweDg4OTMsXHJcbiAgICBBUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDg4OTQsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgOiAweDg4OTUsXHJcblxyXG4gICAgU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEUwLFxyXG4gICAgU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEU0LFxyXG4gICAgRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDogMHg4OEU4LFxyXG5cclxuICAgIEJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICA6IDB4ODc2NCxcclxuICAgIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA6IDB4ODc2NSxcclxuXHJcbiAgICBDVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgOiAweDg2MjYsXHJcblxyXG4gICAgLyogQ3VsbEZhY2VNb2RlICovXHJcbiAgICBGUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDQsXHJcbiAgICBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDUsXHJcbiAgICBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgOiAweDA0MDgsXHJcblxyXG4gICAgLyogRGVwdGhGdW5jdGlvbiAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBFbmFibGVDYXAgKi9cclxuICAgIC8qIFRFWFRVUkVfMkQgKi9cclxuICAgIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NCxcclxuICAgIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJFMixcclxuICAgIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJEMCxcclxuICAgIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEI5MCxcclxuICAgIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MSxcclxuICAgIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEMxMSxcclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAgICA6IDB4ODAzNyxcclxuICAgIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA6IDB4ODA5RSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA6IDB4ODBBMCxcclxuXHJcbiAgICAvKiBFcnJvckNvZGUgKi9cclxuICAgIE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgOiAweDA1MDAsXHJcbiAgICBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgOiAweDA1MDEsXHJcbiAgICBJTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgOiAweDA1MDIsXHJcbiAgICBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgOiAweDA1MDUsXHJcblxyXG4gICAgLyogRnJvbnRGYWNlRGlyZWN0aW9uICovXHJcbiAgICBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDAsXHJcbiAgICBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDEsXHJcblxyXG4gICAgLyogR2V0UE5hbWUgKi9cclxuICAgIExJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICA6IDB4MEIyMSxcclxuICAgIEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA6IDB4ODQ2RCxcclxuICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA6IDB4ODQ2RSxcclxuICAgIENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA6IDB4MEI0NSxcclxuICAgIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NixcclxuICAgIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MCxcclxuICAgIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEI3MixcclxuICAgIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEI3MyxcclxuICAgIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3NCxcclxuICAgIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA6IDB4MEI5MSxcclxuICAgIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA6IDB4MEI5MixcclxuICAgIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICA6IDB4MEI5NCxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA6IDB4MEI5NSxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA6IDB4MEI5NixcclxuICAgIFNURU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA6IDB4MEI5NyxcclxuICAgIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA6IDB4MEI5MyxcclxuICAgIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA6IDB4MEI5OCxcclxuICAgIFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA6IDB4ODgwMCxcclxuICAgIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA6IDB4ODgwMSxcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA6IDB4ODgwMixcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA6IDB4ODgwMyxcclxuICAgIFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA6IDB4OENBMyxcclxuICAgIFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA6IDB4OENBNCxcclxuICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA6IDB4OENBNSxcclxuICAgIFZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJBMixcclxuICAgIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA6IDB4MEMxMCxcclxuICAgIC8qICAgICAgU0NJU1NPUl9URVNUICovXHJcbiAgICBDT0xPUl9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgOiAweDBDMjIsXHJcbiAgICBDT0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgOiAweDBDMjMsXHJcbiAgICBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgOiAweDBDRjUsXHJcbiAgICBQQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgOiAweDBEMDUsXHJcbiAgICBNQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgOiAweDBEMzMsXHJcbiAgICBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgOiAweDBEM0EsXHJcbiAgICBTVUJQSVhFTF9CSVRTICAgICAgICAgICAgICAgICAgOiAweDBENTAsXHJcbiAgICBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTIsXHJcbiAgICBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTMsXHJcbiAgICBCTFVFX0JJVFMgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTQsXHJcbiAgICBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTUsXHJcbiAgICBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTYsXHJcbiAgICBTVEVOQ0lMX0JJVFMgICAgICAgICAgICAgICAgICAgOiAweDBENTcsXHJcbiAgICBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgOiAweDJBMDAsXHJcbiAgICAvKiAgICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgKi9cclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA6IDB4ODAzOCxcclxuICAgIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICA6IDB4ODA2OSxcclxuICAgIFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA6IDB4ODBBOCxcclxuICAgIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODBBOSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICA6IDB4ODBBQSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA6IDB4ODBBQixcclxuXHJcbiAgICAvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi9cclxuXHJcbiAgICBDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgOiAweDg2QTMsXHJcblxyXG4gICAgLyogSGludE1vZGUgKi9cclxuICAgIERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMCxcclxuICAgIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMSxcclxuICAgIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMixcclxuXHJcbiAgICAvKiBIaW50VGFyZ2V0ICovXHJcbiAgICBHRU5FUkFURV9NSVBNQVBfSElOVCAgICAgICAgICAgIDogMHg4MTkyLFxyXG5cclxuICAgIC8qIERhdGFUeXBlICovXHJcbiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDAsXHJcbiAgICBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgOiAweDE0MDEsXHJcbiAgICBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDIsXHJcbiAgICBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgOiAweDE0MDMsXHJcbiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDQsXHJcbiAgICBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgOiAweDE0MDUsXHJcbiAgICBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDYsXHJcblxyXG4gICAgLyogUGl4ZWxGb3JtYXQgKi9cclxuICAgIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA6IDB4MTkwMixcclxuICAgIEFMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNixcclxuICAgIFJHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNyxcclxuICAgIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOCxcclxuICAgIExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOSxcclxuICAgIExVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICA6IDB4MTkwQSxcclxuXHJcbiAgICAvKiBQaXhlbFR5cGUgKi9cclxuICAgIC8qICAgICAgVU5TSUdORURfQllURSAqL1xyXG4gICAgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgIDogMHg4MDMzLFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgIDogMHg4MDM0LFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgIDogMHg4MzYzLFxyXG5cclxuICAgIC8qIFNoYWRlcnMgKi9cclxuICAgIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDogMHg4QjMwLFxyXG4gICAgVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgOiAweDhCMzEsXHJcbiAgICBNQVhfVkVSVEVYX0FUVFJJQlMgICAgICAgICAgICAgICA6IDB4ODg2OSxcclxuICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgIDogMHg4REZCLFxyXG4gICAgTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgOiAweDhERkMsXHJcbiAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA6IDB4OEI0RCxcclxuICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgIDogMHg4QjRDLFxyXG4gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgOiAweDg4NzIsXHJcbiAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA6IDB4OERGRCxcclxuICAgIFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjRGLFxyXG4gICAgREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgOiAweDhCODAsXHJcbiAgICBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MixcclxuICAgIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDogMHg4QjgzLFxyXG4gICAgQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgOiAweDhCODUsXHJcbiAgICBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgICA6IDB4OEI4NixcclxuICAgIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDogMHg4Qjg5LFxyXG4gICAgU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgOiAweDhCOEMsXHJcbiAgICBDVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICA6IDB4OEI4RCxcclxuXHJcbiAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi9cclxuICAgIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMCxcclxuICAgIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMSxcclxuICAgIEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMixcclxuICAgIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMyxcclxuICAgIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNCxcclxuICAgIE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNSxcclxuICAgIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNixcclxuICAgIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNyxcclxuXHJcbiAgICAvKiBTdGVuY2lsT3AgKi9cclxuICAgIC8qICAgICAgWkVSTyAqL1xyXG4gICAgS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAwLFxyXG4gICAgUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAxLFxyXG4gICAgSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAyLFxyXG4gICAgREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAzLFxyXG4gICAgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNTBBLFxyXG4gICAgSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA3LFxyXG4gICAgREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA4LFxyXG5cclxuICAgIC8qIFN0cmluZ05hbWUgKi9cclxuICAgIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMCxcclxuICAgIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMSxcclxuICAgIFZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMixcclxuXHJcbiAgICAvKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbiAgICBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDAsXHJcbiAgICBMSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDEsXHJcblxyXG4gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4gICAgLyogICAgICBORUFSRVNUICovXHJcbiAgICAvKiAgICAgIExJTkVBUiAqL1xyXG4gICAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDogMHgyNzAwLFxyXG4gICAgTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgIDogMHgyNzAxLFxyXG4gICAgTkVBUkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgIDogMHgyNzAyLFxyXG4gICAgTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDogMHgyNzAzLFxyXG5cclxuICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovXHJcbiAgICBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgOiAweDI4MDAsXHJcbiAgICBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgOiAweDI4MDEsXHJcbiAgICBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgOiAweDI4MDIsXHJcbiAgICBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgOiAweDI4MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVRhcmdldCAqL1xyXG4gICAgVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgIDogMHgwREUxLFxyXG4gICAgVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNzAyLFxyXG5cclxuICAgIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA6IDB4ODUxMyxcclxuICAgIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA6IDB4ODUxNCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAgICA6IDB4ODUxNSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA6IDB4ODUxNixcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA6IDB4ODUxNyxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICA6IDB4ODUxOCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA6IDB4ODUxOSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA6IDB4ODUxQSxcclxuICAgIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA6IDB4ODUxQyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVW5pdCAqL1xyXG4gICAgVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMwLFxyXG4gICAgVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMxLFxyXG4gICAgVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMyLFxyXG4gICAgVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMzLFxyXG4gICAgVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM0LFxyXG4gICAgVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM1LFxyXG4gICAgVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM2LFxyXG4gICAgVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM3LFxyXG4gICAgVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM4LFxyXG4gICAgVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM5LFxyXG4gICAgVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENBLFxyXG4gICAgVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENCLFxyXG4gICAgVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENDLFxyXG4gICAgVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENELFxyXG4gICAgVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENFLFxyXG4gICAgVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENGLFxyXG4gICAgVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQwLFxyXG4gICAgVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQxLFxyXG4gICAgVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQyLFxyXG4gICAgVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQzLFxyXG4gICAgVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ0LFxyXG4gICAgVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ1LFxyXG4gICAgVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ2LFxyXG4gICAgVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ3LFxyXG4gICAgVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ4LFxyXG4gICAgVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ5LFxyXG4gICAgVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERBLFxyXG4gICAgVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERCLFxyXG4gICAgVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERDLFxyXG4gICAgVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERELFxyXG4gICAgVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERFLFxyXG4gICAgVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERGLFxyXG4gICAgQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgIDogMHg4NEUwLFxyXG5cclxuICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4gICAgUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgyOTAxLFxyXG4gICAgQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgIDogMHg4MTJGLFxyXG4gICAgTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgIDogMHg4MzcwLFxyXG5cclxuICAgIC8qIFVuaWZvcm0gVHlwZXMgKi9cclxuICAgIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MCxcclxuICAgIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MSxcclxuICAgIEZMT0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MixcclxuICAgIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MyxcclxuICAgIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NCxcclxuICAgIElOVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NSxcclxuICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NixcclxuICAgIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NyxcclxuICAgIEJPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OCxcclxuICAgIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OSxcclxuICAgIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QSxcclxuICAgIEZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QixcclxuICAgIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QyxcclxuICAgIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1RSxcclxuICAgIFNBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICA6IDB4OEI2MCxcclxuXHJcbiAgICAvKiBWZXJ0ZXggQXJyYXlzICovXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgIDogMHg4NjIyLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA6IDB4ODYyMyxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgOiAweDg2MjQsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgIDogMHg4NjI1LFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA6IDB4ODg2QSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAgICAgOiAweDg2NDUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIDogMHg4ODlGLFxyXG5cclxuICAgIC8qIFNoYWRlciBTb3VyY2UgKi9cclxuICAgIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA6IDB4OEI4MSxcclxuXHJcbiAgICAvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqL1xyXG4gICAgTE9XX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYwLFxyXG4gICAgTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDogMHg4REYxLFxyXG4gICAgSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REYyLFxyXG4gICAgTE9XX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYzLFxyXG4gICAgTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REY0LFxyXG4gICAgSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REY1LFxyXG5cclxuICAgIC8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi9cclxuICAgIEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MCxcclxuICAgIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MSxcclxuXHJcbiAgICBSR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTYsXHJcbiAgICBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTcsXHJcbiAgICBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhENjIsXHJcbiAgICBERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgOiAweDgxQTUsXHJcbiAgICBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgOiAweDE5MDEsXHJcbiAgICBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgOiAweDhENDgsXHJcbiAgICBERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgOiAweDg0RjksXHJcblxyXG4gICAgUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDogMHg4RDQyLFxyXG4gICAgUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgIDogMHg4RDQzLFxyXG4gICAgUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgIDogMHg4RDQ0LFxyXG4gICAgUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDogMHg4RDUwLFxyXG4gICAgUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgIDogMHg4RDUxLFxyXG4gICAgUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgIDogMHg4RDUyLFxyXG4gICAgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgIDogMHg4RDUzLFxyXG4gICAgUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgIDogMHg4RDU0LFxyXG4gICAgUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgIDogMHg4RDU1LFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgIDogMHg4Q0QwLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgOiAweDhDRDEsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA6IDB4OENEMixcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIDogMHg4Q0QzLFxyXG5cclxuICAgIENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA6IDB4OENFMCxcclxuICAgIERFUFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICA6IDB4OEQwMCxcclxuICAgIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA6IDB4OEQyMCxcclxuICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA6IDB4ODIxQSxcclxuXHJcbiAgICBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgIDogMHg4Q0Q1LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgOiAweDhDRDYsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA6IDB4OENENyxcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgIDogMHg4Q0Q5LFxyXG4gICAgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgOiAweDhDREQsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgIDogMHg4Q0E2LFxyXG4gICAgUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDogMHg4Q0E3LFxyXG4gICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDogMHg4NEU4LFxyXG5cclxuICAgIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA6IDB4MDUwNixcclxuXHJcbiAgICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqL1xyXG4gICAgVU5QQUNLX0ZMSVBfWV9XRUJHTCAgICAgICAgICAgIDogMHg5MjQwLFxyXG4gICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIDogMHg5MjQxLFxyXG4gICAgQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgIDogMHg5MjQyLFxyXG4gICAgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA6IDB4OTI0MyxcclxuICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICA6IDB4OTI0NCxcclxufTtcclxuIiwiLyoqXHJcbiAqIFNpbXBsZSBkb3VibGUgbGlua2VkIGxpc3QuIENvbXBhcmVkIHdpdGggYXJyYXksIGl0IGhhcyBPKDEpIHJlbW92ZSBvcGVyYXRpb24uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkxpbmtlZExpc3RcclxuICovXHJcbnZhciBMaW5rZWRMaXN0ID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHRoaXMuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgcmV0dXJuIGVudHJ5O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluc2VydCBhIG5ldyB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0gIHt9IHZhbFxyXG4gKiBAcmV0dXJuIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEF0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAobmV4dCAmJiBjdXJzb3IgIT0gaWR4KSB7XHJcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgICAgICB2YXIgcHJldiA9IG5leHQucHJldjtcclxuICAgICAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICAgICAgZW50cnkucHJldiA9IHByZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgICAgIG5leHQucHJldiA9IGVudHJ5O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnQodmFsKTtcclxuICAgIH1cclxufTtcclxuXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEJlZm9yZUVudHJ5ID0gZnVuY3Rpb24gKHZhbCwgbmV4dCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgaWYgKCFwcmV2KSB7IC8vbmV4dCBpcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoKys7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGFuIGVudHJ5IGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGlmICghdGhpcy5oZWFkKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSB0aGlzLnRhaWw7XHJcbiAgICAgICAgdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkuXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICB2YXIgcHJldiA9IGVudHJ5LnByZXY7XHJcbiAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XHJcbiAgICBpZiAocHJldikge1xyXG4gICAgICAgIHByZXYubmV4dCA9IG5leHQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBJcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gbmV4dDtcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIHRhaWxcclxuICAgICAgICB0aGlzLnRhaWwgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IGVudHJ5LnByZXYgPSBudWxsO1xyXG4gICAgdGhpcy5fbGVuZ3RoLS07XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGVudHJ5IGF0IGluZGV4LlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmVBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKGN1cnIpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZShjdXJyKTtcclxuICAgICAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCBoZWFkIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5oZWFkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB0YWlsIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldFRhaWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy50YWlsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFpbC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5nZXRBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnIudmFsdWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7fSB2YWx1ZVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIpIHtcclxuICAgICAgICBpZiAoY3Vyci52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIElmIGxpc3QgaXMgZW1wdHlcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYlxyXG4gKiBAcGFyYW0gIHt9IGNvbnRleHRcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGlkeCA9IDA7XHJcbiAgICB2YXIgaGF2ZUNvbnRleHQgPSB0eXBlb2YoY29udGV4dCkgIT0gJ3VuZGVmaW5lZCc7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChoYXZlQ29udGV4dCkge1xyXG4gICAgICAgICAgICBjYi5jYWxsKGNvbnRleHQsIGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjYihjdXJyLnZhbHVlLCBpZHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGlkeCsrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBsaXN0XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudGFpbCA9IHRoaXMuaGVhZCA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAcGFyYW0ge30gdmFsXHJcbiAqL1xyXG5MaW5rZWRMaXN0LkVudHJ5ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5leHQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnByZXYgPSBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlua2VkTGlzdDtcclxuIiwiaW1wb3J0IExpbmtlZExpc3QgZnJvbSAnLi9MaW5rZWRMaXN0JztcclxuXHJcbi8qKlxyXG4gKiBMUlUgQ2FjaGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTFJVXHJcbiAqL1xyXG52YXIgTFJVID0gZnVuY3Rpb24gKG1heFNpemUpIHtcclxuXHJcbiAgICB0aGlzLl9saXN0ID0gbmV3IExpbmtlZExpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9tYXAgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZSB8fCAxMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgY2FjaGUgbWF4IHNpemVcclxuICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICovXHJcbkxSVS5wcm90b3R5cGUuc2V0TWF4U2l6ZSA9IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICB0aGlzLl9tYXhTaXplID0gc2l6ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX2xpc3QubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbiA+PSB0aGlzLl9tYXhTaXplICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkXHJcbiAgICAgICAgICAgIHZhciBsZWFzdFVzZWRFbnRyeSA9IHRoaXMuX2xpc3QuaGVhZDtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUobGVhc3RVc2VkRW50cnkpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2xlYXN0VXNlZEVudHJ5LmtleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9saXN0Lmluc2VydCh2YWx1ZSk7XHJcbiAgICAgICAgZW50cnkua2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX21hcFtrZXldID0gZW50cnk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7c3RyaW5nfSBrZXlcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0aGlzLl9tYXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIC8vIFB1dCB0aGUgbGF0ZXN0IHVzZWQgZW50cnkgaW4gdGhlIHRhaWxcclxuICAgICAgICBpZiAoZW50cnkgIT09IHRoaXMuX2xpc3QudGFpbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuICovXHJcbkxSVS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XHJcbiAgICBpZiAodHlwZW9mKGVudHJ5KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2tleV07XHJcbiAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUoZW50cnkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBjYWNoZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xpc3QuY2xlYXIoKTtcclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTFJVO1xyXG4iLCIvKipcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUuY29sb3JcclxuICovXHJcbmltcG9ydCBMUlUgZnJvbSAnLi4vY29yZS9MUlUnO1xyXG5cclxudmFyIGNvbG9yVXRpbCA9IHt9O1xyXG5cclxudmFyIGtDU1NDb2xvclRhYmxlID0ge1xyXG4gICAgJ3RyYW5zcGFyZW50JzogWzAsMCwwLDBdLCAnYWxpY2VibHVlJzogWzI0MCwyNDgsMjU1LDFdLFxyXG4gICAgJ2FudGlxdWV3aGl0ZSc6IFsyNTAsMjM1LDIxNSwxXSwgJ2FxdWEnOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2FxdWFtYXJpbmUnOiBbMTI3LDI1NSwyMTIsMV0sICdhenVyZSc6IFsyNDAsMjU1LDI1NSwxXSxcclxuICAgICdiZWlnZSc6IFsyNDUsMjQ1LDIyMCwxXSwgJ2Jpc3F1ZSc6IFsyNTUsMjI4LDE5NiwxXSxcclxuICAgICdibGFjayc6IFswLDAsMCwxXSwgJ2JsYW5jaGVkYWxtb25kJzogWzI1NSwyMzUsMjA1LDFdLFxyXG4gICAgJ2JsdWUnOiBbMCwwLDI1NSwxXSwgJ2JsdWV2aW9sZXQnOiBbMTM4LDQzLDIyNiwxXSxcclxuICAgICdicm93bic6IFsxNjUsNDIsNDIsMV0sICdidXJseXdvb2QnOiBbMjIyLDE4NCwxMzUsMV0sXHJcbiAgICAnY2FkZXRibHVlJzogWzk1LDE1OCwxNjAsMV0sICdjaGFydHJldXNlJzogWzEyNywyNTUsMCwxXSxcclxuICAgICdjaG9jb2xhdGUnOiBbMjEwLDEwNSwzMCwxXSwgJ2NvcmFsJzogWzI1NSwxMjcsODAsMV0sXHJcbiAgICAnY29ybmZsb3dlcmJsdWUnOiBbMTAwLDE0OSwyMzcsMV0sICdjb3Juc2lsayc6IFsyNTUsMjQ4LDIyMCwxXSxcclxuICAgICdjcmltc29uJzogWzIyMCwyMCw2MCwxXSwgJ2N5YW4nOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2RhcmtibHVlJzogWzAsMCwxMzksMV0sICdkYXJrY3lhbic6IFswLDEzOSwxMzksMV0sXHJcbiAgICAnZGFya2dvbGRlbnJvZCc6IFsxODQsMTM0LDExLDFdLCAnZGFya2dyYXknOiBbMTY5LDE2OSwxNjksMV0sXHJcbiAgICAnZGFya2dyZWVuJzogWzAsMTAwLDAsMV0sICdkYXJrZ3JleSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJra2hha2knOiBbMTg5LDE4MywxMDcsMV0sICdkYXJrbWFnZW50YSc6IFsxMzksMCwxMzksMV0sXHJcbiAgICAnZGFya29saXZlZ3JlZW4nOiBbODUsMTA3LDQ3LDFdLCAnZGFya29yYW5nZSc6IFsyNTUsMTQwLDAsMV0sXHJcbiAgICAnZGFya29yY2hpZCc6IFsxNTMsNTAsMjA0LDFdLCAnZGFya3JlZCc6IFsxMzksMCwwLDFdLFxyXG4gICAgJ2RhcmtzYWxtb24nOiBbMjMzLDE1MCwxMjIsMV0sICdkYXJrc2VhZ3JlZW4nOiBbMTQzLDE4OCwxNDMsMV0sXHJcbiAgICAnZGFya3NsYXRlYmx1ZSc6IFs3Miw2MSwxMzksMV0sICdkYXJrc2xhdGVncmF5JzogWzQ3LDc5LDc5LDFdLFxyXG4gICAgJ2RhcmtzbGF0ZWdyZXknOiBbNDcsNzksNzksMV0sICdkYXJrdHVycXVvaXNlJzogWzAsMjA2LDIwOSwxXSxcclxuICAgICdkYXJrdmlvbGV0JzogWzE0OCwwLDIxMSwxXSwgJ2RlZXBwaW5rJzogWzI1NSwyMCwxNDcsMV0sXHJcbiAgICAnZGVlcHNreWJsdWUnOiBbMCwxOTEsMjU1LDFdLCAnZGltZ3JheSc6IFsxMDUsMTA1LDEwNSwxXSxcclxuICAgICdkaW1ncmV5JzogWzEwNSwxMDUsMTA1LDFdLCAnZG9kZ2VyYmx1ZSc6IFszMCwxNDQsMjU1LDFdLFxyXG4gICAgJ2ZpcmVicmljayc6IFsxNzgsMzQsMzQsMV0sICdmbG9yYWx3aGl0ZSc6IFsyNTUsMjUwLDI0MCwxXSxcclxuICAgICdmb3Jlc3RncmVlbic6IFszNCwxMzksMzQsMV0sICdmdWNoc2lhJzogWzI1NSwwLDI1NSwxXSxcclxuICAgICdnYWluc2Jvcm8nOiBbMjIwLDIyMCwyMjAsMV0sICdnaG9zdHdoaXRlJzogWzI0OCwyNDgsMjU1LDFdLFxyXG4gICAgJ2dvbGQnOiBbMjU1LDIxNSwwLDFdLCAnZ29sZGVucm9kJzogWzIxOCwxNjUsMzIsMV0sXHJcbiAgICAnZ3JheSc6IFsxMjgsMTI4LDEyOCwxXSwgJ2dyZWVuJzogWzAsMTI4LDAsMV0sXHJcbiAgICAnZ3JlZW55ZWxsb3cnOiBbMTczLDI1NSw0NywxXSwgJ2dyZXknOiBbMTI4LDEyOCwxMjgsMV0sXHJcbiAgICAnaG9uZXlkZXcnOiBbMjQwLDI1NSwyNDAsMV0sICdob3RwaW5rJzogWzI1NSwxMDUsMTgwLDFdLFxyXG4gICAgJ2luZGlhbnJlZCc6IFsyMDUsOTIsOTIsMV0sICdpbmRpZ28nOiBbNzUsMCwxMzAsMV0sXHJcbiAgICAnaXZvcnknOiBbMjU1LDI1NSwyNDAsMV0sICdraGFraSc6IFsyNDAsMjMwLDE0MCwxXSxcclxuICAgICdsYXZlbmRlcic6IFsyMzAsMjMwLDI1MCwxXSwgJ2xhdmVuZGVyYmx1c2gnOiBbMjU1LDI0MCwyNDUsMV0sXHJcbiAgICAnbGF3bmdyZWVuJzogWzEyNCwyNTIsMCwxXSwgJ2xlbW9uY2hpZmZvbic6IFsyNTUsMjUwLDIwNSwxXSxcclxuICAgICdsaWdodGJsdWUnOiBbMTczLDIxNiwyMzAsMV0sICdsaWdodGNvcmFsJzogWzI0MCwxMjgsMTI4LDFdLFxyXG4gICAgJ2xpZ2h0Y3lhbic6IFsyMjQsMjU1LDI1NSwxXSwgJ2xpZ2h0Z29sZGVucm9keWVsbG93JzogWzI1MCwyNTAsMjEwLDFdLFxyXG4gICAgJ2xpZ2h0Z3JheSc6IFsyMTEsMjExLDIxMSwxXSwgJ2xpZ2h0Z3JlZW4nOiBbMTQ0LDIzOCwxNDQsMV0sXHJcbiAgICAnbGlnaHRncmV5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRwaW5rJzogWzI1NSwxODIsMTkzLDFdLFxyXG4gICAgJ2xpZ2h0c2FsbW9uJzogWzI1NSwxNjAsMTIyLDFdLCAnbGlnaHRzZWFncmVlbic6IFszMiwxNzgsMTcwLDFdLFxyXG4gICAgJ2xpZ2h0c2t5Ymx1ZSc6IFsxMzUsMjA2LDI1MCwxXSwgJ2xpZ2h0c2xhdGVncmF5JzogWzExOSwxMzYsMTUzLDFdLFxyXG4gICAgJ2xpZ2h0c2xhdGVncmV5JzogWzExOSwxMzYsMTUzLDFdLCAnbGlnaHRzdGVlbGJsdWUnOiBbMTc2LDE5NiwyMjIsMV0sXHJcbiAgICAnbGlnaHR5ZWxsb3cnOiBbMjU1LDI1NSwyMjQsMV0sICdsaW1lJzogWzAsMjU1LDAsMV0sXHJcbiAgICAnbGltZWdyZWVuJzogWzUwLDIwNSw1MCwxXSwgJ2xpbmVuJzogWzI1MCwyNDAsMjMwLDFdLFxyXG4gICAgJ21hZ2VudGEnOiBbMjU1LDAsMjU1LDFdLCAnbWFyb29uJzogWzEyOCwwLDAsMV0sXHJcbiAgICAnbWVkaXVtYXF1YW1hcmluZSc6IFsxMDIsMjA1LDE3MCwxXSwgJ21lZGl1bWJsdWUnOiBbMCwwLDIwNSwxXSxcclxuICAgICdtZWRpdW1vcmNoaWQnOiBbMTg2LDg1LDIxMSwxXSwgJ21lZGl1bXB1cnBsZSc6IFsxNDcsMTEyLDIxOSwxXSxcclxuICAgICdtZWRpdW1zZWFncmVlbic6IFs2MCwxNzksMTEzLDFdLCAnbWVkaXVtc2xhdGVibHVlJzogWzEyMywxMDQsMjM4LDFdLFxyXG4gICAgJ21lZGl1bXNwcmluZ2dyZWVuJzogWzAsMjUwLDE1NCwxXSwgJ21lZGl1bXR1cnF1b2lzZSc6IFs3MiwyMDksMjA0LDFdLFxyXG4gICAgJ21lZGl1bXZpb2xldHJlZCc6IFsxOTksMjEsMTMzLDFdLCAnbWlkbmlnaHRibHVlJzogWzI1LDI1LDExMiwxXSxcclxuICAgICdtaW50Y3JlYW0nOiBbMjQ1LDI1NSwyNTAsMV0sICdtaXN0eXJvc2UnOiBbMjU1LDIyOCwyMjUsMV0sXHJcbiAgICAnbW9jY2FzaW4nOiBbMjU1LDIyOCwxODEsMV0sICduYXZham93aGl0ZSc6IFsyNTUsMjIyLDE3MywxXSxcclxuICAgICduYXZ5JzogWzAsMCwxMjgsMV0sICdvbGRsYWNlJzogWzI1MywyNDUsMjMwLDFdLFxyXG4gICAgJ29saXZlJzogWzEyOCwxMjgsMCwxXSwgJ29saXZlZHJhYic6IFsxMDcsMTQyLDM1LDFdLFxyXG4gICAgJ29yYW5nZSc6IFsyNTUsMTY1LDAsMV0sICdvcmFuZ2VyZWQnOiBbMjU1LDY5LDAsMV0sXHJcbiAgICAnb3JjaGlkJzogWzIxOCwxMTIsMjE0LDFdLCAncGFsZWdvbGRlbnJvZCc6IFsyMzgsMjMyLDE3MCwxXSxcclxuICAgICdwYWxlZ3JlZW4nOiBbMTUyLDI1MSwxNTIsMV0sICdwYWxldHVycXVvaXNlJzogWzE3NSwyMzgsMjM4LDFdLFxyXG4gICAgJ3BhbGV2aW9sZXRyZWQnOiBbMjE5LDExMiwxNDcsMV0sICdwYXBheWF3aGlwJzogWzI1NSwyMzksMjEzLDFdLFxyXG4gICAgJ3BlYWNocHVmZic6IFsyNTUsMjE4LDE4NSwxXSwgJ3BlcnUnOiBbMjA1LDEzMyw2MywxXSxcclxuICAgICdwaW5rJzogWzI1NSwxOTIsMjAzLDFdLCAncGx1bSc6IFsyMjEsMTYwLDIyMSwxXSxcclxuICAgICdwb3dkZXJibHVlJzogWzE3NiwyMjQsMjMwLDFdLCAncHVycGxlJzogWzEyOCwwLDEyOCwxXSxcclxuICAgICdyZWQnOiBbMjU1LDAsMCwxXSwgJ3Jvc3licm93bic6IFsxODgsMTQzLDE0MywxXSxcclxuICAgICdyb3lhbGJsdWUnOiBbNjUsMTA1LDIyNSwxXSwgJ3NhZGRsZWJyb3duJzogWzEzOSw2OSwxOSwxXSxcclxuICAgICdzYWxtb24nOiBbMjUwLDEyOCwxMTQsMV0sICdzYW5keWJyb3duJzogWzI0NCwxNjQsOTYsMV0sXHJcbiAgICAnc2VhZ3JlZW4nOiBbNDYsMTM5LDg3LDFdLCAnc2Vhc2hlbGwnOiBbMjU1LDI0NSwyMzgsMV0sXHJcbiAgICAnc2llbm5hJzogWzE2MCw4Miw0NSwxXSwgJ3NpbHZlcic6IFsxOTIsMTkyLDE5MiwxXSxcclxuICAgICdza3libHVlJzogWzEzNSwyMDYsMjM1LDFdLCAnc2xhdGVibHVlJzogWzEwNiw5MCwyMDUsMV0sXHJcbiAgICAnc2xhdGVncmF5JzogWzExMiwxMjgsMTQ0LDFdLCAnc2xhdGVncmV5JzogWzExMiwxMjgsMTQ0LDFdLFxyXG4gICAgJ3Nub3cnOiBbMjU1LDI1MCwyNTAsMV0sICdzcHJpbmdncmVlbic6IFswLDI1NSwxMjcsMV0sXHJcbiAgICAnc3RlZWxibHVlJzogWzcwLDEzMCwxODAsMV0sICd0YW4nOiBbMjEwLDE4MCwxNDAsMV0sXHJcbiAgICAndGVhbCc6IFswLDEyOCwxMjgsMV0sICd0aGlzdGxlJzogWzIxNiwxOTEsMjE2LDFdLFxyXG4gICAgJ3RvbWF0byc6IFsyNTUsOTksNzEsMV0sICd0dXJxdW9pc2UnOiBbNjQsMjI0LDIwOCwxXSxcclxuICAgICd2aW9sZXQnOiBbMjM4LDEzMCwyMzgsMV0sICd3aGVhdCc6IFsyNDUsMjIyLDE3OSwxXSxcclxuICAgICd3aGl0ZSc6IFsyNTUsMjU1LDI1NSwxXSwgJ3doaXRlc21va2UnOiBbMjQ1LDI0NSwyNDUsMV0sXHJcbiAgICAneWVsbG93JzogWzI1NSwyNTUsMCwxXSwgJ3llbGxvd2dyZWVuJzogWzE1NCwyMDUsNTAsMV1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wQ3NzQnl0ZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMjU1LlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMjU1ID8gMjU1IDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NBbmdsZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMzYwLlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMzYwID8gMzYwIDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NGbG9hdChmKSB7ICAvLyBDbGFtcCB0byBmbG9hdCAwLjAgLi4gMS4wLlxyXG4gICAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzSW50KHN0cikgeyAgLy8gaW50IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUZsb2F0KHN0cikgLyAxMDAgKiAyNTUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUludChzdHIsIDEwKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzRmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxyXG4gICAgaWYgKHN0ci5sZW5ndGggJiYgc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gMSkgPT09ICclJykge1xyXG4gICAgICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSAvIDEwMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjc3NIdWVUb1JnYihtMSwgbTIsIGgpIHtcclxuICAgIGlmIChoIDwgMCkge1xyXG4gICAgICAgIGggKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGggPiAxKSB7XHJcbiAgICAgICAgaCAtPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoICogNiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiBoICogNjtcclxuICAgIH1cclxuICAgIGlmIChoICogMiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTI7XHJcbiAgICB9XHJcbiAgICBpZiAoaCAqIDMgPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcclxuICAgIH1cclxuICAgIHJldHVybiBtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGVycE51bWJlcihhLCBiLCBwKSB7XHJcbiAgICByZXR1cm4gYSArIChiIC0gYSkgKiBwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRSZ2JhKG91dCwgciwgZywgYiwgYSkge1xyXG4gICAgb3V0WzBdID0gcjsgb3V0WzFdID0gZzsgb3V0WzJdID0gYjsgb3V0WzNdID0gYTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuZnVuY3Rpb24gY29weVJnYmEob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdOyBvdXRbMV0gPSBhWzFdOyBvdXRbMl0gPSBhWzJdOyBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxudmFyIGNvbG9yQ2FjaGUgPSBuZXcgTFJVKDIwKTtcclxudmFyIGxhc3RSZW1vdmVkQXJyID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIC8vIFJldXNlIHJlbW92ZWQgYXJyYXlcclxuICAgIGlmIChsYXN0UmVtb3ZlZEFycikge1xyXG4gICAgICAgIGNvcHlSZ2JhKGxhc3RSZW1vdmVkQXJyLCByZ2JhQXJyKTtcclxuICAgIH1cclxuICAgIGxhc3RSZW1vdmVkQXJyID0gY29sb3JDYWNoZS5wdXQoY29sb3JTdHIsIGxhc3RSZW1vdmVkQXJyIHx8IChyZ2JhQXJyLnNsaWNlKCkpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5wYXJzZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JTdHJcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxyXG4gKi9cclxuY29sb3JVdGlsLnBhcnNlID0gZnVuY3Rpb24gKGNvbG9yU3RyLCByZ2JhQXJyKSB7XHJcbiAgICBpZiAoIWNvbG9yU3RyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyciA9IHJnYmFBcnIgfHwgW107XHJcblxyXG4gICAgdmFyIGNhY2hlZCA9IGNvbG9yQ2FjaGUuZ2V0KGNvbG9yU3RyKTtcclxuICAgIGlmIChjYWNoZWQpIHtcclxuICAgICAgICByZXR1cm4gY29weVJnYmEocmdiYUFyciwgY2FjaGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb2xvclN0ciBtYXkgYmUgbm90IHN0cmluZ1xyXG4gICAgY29sb3JTdHIgPSBjb2xvclN0ciArICcnO1xyXG4gICAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXHJcbiAgICB2YXIgc3RyID0gY29sb3JTdHIucmVwbGFjZSgvIC9nLCAnJykudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDb2xvciBrZXl3b3JkcyAoYW5kIHRyYW5zcGFyZW50KSBsb29rdXAuXHJcbiAgICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSB7XHJcbiAgICAgICAgY29weVJnYmEocmdiYUFyciwga0NTU0NvbG9yVGFibGVbc3RyXSk7XHJcbiAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2FiYyBhbmQgI2FiYzEyMyBzeW50YXguXHJcbiAgICBpZiAoc3RyLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZjApIHwgKChpdiAmIDB4ZjApID4+IDQpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmKSB8ICgoaXYgJiAweGYpIDw8IDQpLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0ci5sZW5ndGggPT09IDcpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDAwMCkgPj4gMTYsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDApID4+IDgsXHJcbiAgICAgICAgICAgICAgICBpdiAmIDB4ZmYsXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcclxuICAgIGlmIChvcCAhPT0gLTEgJiYgZXAgKyAxID09PSBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGZuYW1lID0gc3RyLnN1YnN0cigwLCBvcCk7XHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHN0ci5zdWJzdHIob3AgKyAxLCBlcCAtIChvcCArIDEpKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHZhciBhbHBoYSA9IDE7ICAvLyBUbyBhbGxvdyBjYXNlIGZhbGx0aHJvdWdoLlxyXG4gICAgICAgIHN3aXRjaCAoZm5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAncmdiYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxwaGEgPSBwYXJzZUNzc0Zsb2F0KHBhcmFtcy5wb3AoKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxyXG4gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guXHJcbiAgICAgICAgICAgIGNhc2UgJ3JnYic6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzFdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMl0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGFscGhhXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgY2FzZSAnaHNsYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1zWzNdID0gcGFyc2VDc3NGbG9hdChwYXJhbXNbM10pO1xyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2wnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGhzbGEycmdiYShwYXJhbXMsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgIHJldHVybjtcclxufTtcclxuXHJcbmNvbG9yVXRpbC5wYXJzZVRvRmxvYXQgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIHJnYmFBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgaWYgKCFyZ2JhQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyclswXSAvPSAyNTU7XHJcbiAgICByZ2JhQXJyWzFdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMl0gLz0gMjU1O1xyXG4gICAgcmV0dXJuIHJnYmFBcnI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IuaHNsYTJyZ2JhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKi9cclxuZnVuY3Rpb24gaHNsYTJyZ2JhKGhzbGEsIHJnYmEpIHtcclxuICAgIHZhciBoID0gKCgocGFyc2VGbG9hdChoc2xhWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxyXG4gICAgLy8gTk9URShkZWFubSk6IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgcy9sIHNob3VsZCBvbmx5IGJlXHJcbiAgICAvLyBwZXJjZW50YWdlcywgYnV0IHdlIGRvbid0IGJvdGhlciBhbmQgbGV0IGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICB2YXIgcyA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsxXSk7XHJcbiAgICB2YXIgbCA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsyXSk7XHJcbiAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcclxuICAgIHZhciBtMSA9IGwgKiAyIC0gbTI7XHJcblxyXG4gICAgcmdiYSA9IHJnYmEgfHwgW107XHJcbiAgICBzZXRSZ2JhKHJnYmEsXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCArIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxyXG4gICAgICAgIGNsYW1wQ3NzQnl0ZShjc3NIdWVUb1JnYihtMSwgbTIsIGggLSAxIC8gMykgKiAyNTUpLFxyXG4gICAgICAgIDFcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGhzbGEubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgcmdiYVszXSA9IGhzbGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJnYmE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IucmdiYTJoc2xhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHJnYmFcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICovXHJcbmZ1bmN0aW9uIHJnYmEyaHNsYShyZ2JhKSB7XHJcbiAgICBpZiAoIXJnYmEpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUkdCIGZyb20gMCB0byAyNTVcclxuICAgIHZhciBSID0gcmdiYVswXSAvIDI1NTtcclxuICAgIHZhciBHID0gcmdiYVsxXSAvIDI1NTtcclxuICAgIHZhciBCID0gcmdiYVsyXSAvIDI1NTtcclxuXHJcbiAgICB2YXIgdk1pbiA9IE1hdGgubWluKFIsIEcsIEIpOyAvLyBNaW4uIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIHZNYXggPSBNYXRoLm1heChSLCBHLCBCKTsgLy8gTWF4LiB2YWx1ZSBvZiBSR0JcclxuICAgIHZhciBkZWx0YSA9IHZNYXggLSB2TWluOyAvLyBEZWx0YSBSR0IgdmFsdWVcclxuXHJcbiAgICB2YXIgTCA9ICh2TWF4ICsgdk1pbikgLyAyO1xyXG4gICAgdmFyIEg7XHJcbiAgICB2YXIgUztcclxuICAgIC8vIEhTTCByZXN1bHRzIGZyb20gMCB0byAxXHJcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICBIID0gMDtcclxuICAgICAgICBTID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChMIDwgMC41KSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICh2TWF4ICsgdk1pbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBTID0gZGVsdGEgLyAoMiAtIHZNYXggLSB2TWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkZWx0YVIgPSAoKCh2TWF4IC0gUikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUcgPSAoKCh2TWF4IC0gRykgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUIgPSAoKCh2TWF4IC0gQikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG5cclxuICAgICAgICBpZiAoUiA9PT0gdk1heCkge1xyXG4gICAgICAgICAgICBIID0gZGVsdGFCIC0gZGVsdGFHO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChHID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMSAvIDMpICsgZGVsdGFSIC0gZGVsdGFCO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChCID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMiAvIDMpICsgZGVsdGFHIC0gZGVsdGFSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPCAwKSB7XHJcbiAgICAgICAgICAgIEggKz0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChIID4gMSkge1xyXG4gICAgICAgICAgICBIIC09IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBoc2xhID0gW0ggKiAzNjAsIFMsIExdO1xyXG5cclxuICAgIGlmIChyZ2JhWzNdICE9IG51bGwpIHtcclxuICAgICAgICBoc2xhLnB1c2gocmdiYVszXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhzbGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IubGlmdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC5saWZ0ID0gZnVuY3Rpb24gKGNvbG9yLCBsZXZlbCkge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsZXZlbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gY29sb3JBcnJbaV0gKiAoMSAtIGxldmVsKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvckFycltpXSA9ICgoMjU1IC0gY29sb3JBcnJbaV0pICogbGV2ZWwgKyBjb2xvckFycltpXSkgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGNvbG9yQXJyLCBjb2xvckFyci5sZW5ndGggPT09IDQgPyAncmdiYScgOiAncmdiJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IudG9IZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC50b0hleCA9IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIHJldHVybiAoKDEgPDwgMjQpICsgKGNvbG9yQXJyWzBdIDw8IDE2KSArIChjb2xvckFyclsxXSA8PCA4KSArICgrY29sb3JBcnJbMl0pKS50b1N0cmluZygxNikuc2xpY2UoMSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTWFwIHZhbHVlIHRvIGNvbG9yLiBGYXN0ZXIgdGhhbiBsZXJwIG1ldGhvZHMgYmVjYXVzZSBjb2xvciBpcyByZXByZXNlbnRlZCBieSByZ2JhIGFycmF5LlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBjb2xvcnMgTGlzdCBvZiByZ2JhIGNvbG9yIGFycmF5XHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvdXRdIE1hcHBlZCBnYmEgY29sb3IgYXJyYXlcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IHdpbGwgYmUgbnVsbC91bmRlZmluZWQgaWYgaW5wdXQgaWxsZWdhbC5cclxuICovXHJcbmNvbG9yVXRpbC5mYXN0TGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgb3V0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dCA9IG91dCB8fCBbXTtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yc1tsZWZ0SW5kZXhdO1xyXG4gICAgdmFyIHJpZ2h0Q29sb3IgPSBjb2xvcnNbcmlnaHRJbmRleF07XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuICAgIG91dFswXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKTtcclxuICAgIG91dFsxXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsxXSwgcmlnaHRDb2xvclsxXSwgZHYpKTtcclxuICAgIG91dFsyXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKTtcclxuICAgIG91dFszXSA9IGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuY29sb3JVdGlsLmZhc3RNYXBUb0NvbG9yID0gY29sb3JVdGlsLmZhc3RMZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3JtYWxpemVkVmFsdWUgQSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNvbG9ycyBDb2xvciBsaXN0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBmdWxsT3V0cHV0IERlZmF1bHQgZmFsc2UuXHJcbiAqIEByZXR1cm4geyhzdHJpbmd8T2JqZWN0KX0gUmVzdWx0IGNvbG9yLiBJZiBmdWxsT3V0cHV0LFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IC4uLiwgbGVmdEluZGV4OiAuLi4sIHJpZ2h0SW5kZXg6IC4uLiwgdmFsdWU6IC4uLn0sXHJcbiAqL1xyXG5jb2xvclV0aWwubGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgZnVsbE91dHB1dCkge1xyXG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXHJcbiAgICAgICAgfHwgIShub3JtYWxpemVkVmFsdWUgPj0gMCAmJiBub3JtYWxpemVkVmFsdWUgPD0gMSlcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbbGVmdEluZGV4XSk7XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbcmlnaHRJbmRleF0pO1xyXG4gICAgdmFyIGR2ID0gdmFsdWUgLSBsZWZ0SW5kZXg7XHJcblxyXG4gICAgdmFyIGNvbG9yID0gY29sb3JVdGlsLnN0cmluZ2lmeShcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMl0sIHJpZ2h0Q29sb3JbMl0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSlcclxuICAgICAgICBdLFxyXG4gICAgICAgICdyZ2JhJ1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZnVsbE91dHB1dFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgIGxlZnRJbmRleDogbGVmdEluZGV4LFxyXG4gICAgICAgICAgICByaWdodEluZGV4OiByaWdodEluZGV4LFxyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgOiBjb2xvcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkXHJcbiAqL1xyXG5jb2xvclV0aWwubWFwVG9Db2xvciA9IGNvbG9yVXRpbC5sZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBoIDAgfiAzNjAsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcyAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBsIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlIU0wgPSBmdW5jdGlvbiAoY29sb3IsIGgsIHMsIGwpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgICBjb2xvciA9IHJnYmEyaHNsYShjb2xvcik7XHJcbiAgICAgICAgaCAhPSBudWxsICYmIChjb2xvclswXSA9IGNsYW1wQ3NzQW5nbGUoaCkpO1xyXG4gICAgICAgIHMgIT0gbnVsbCAmJiAoY29sb3JbMV0gPSBwYXJzZUNzc0Zsb2F0KHMpKTtcclxuICAgICAgICBsICE9IG51bGwgJiYgKGNvbG9yWzJdID0gcGFyc2VDc3NGbG9hdChsKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGhzbGEycmdiYShjb2xvciksICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBhbHBoYSAwIH4gMVxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlBbHBoYSA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IgJiYgYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbG9yWzNdID0gY2xhbXBDc3NGbG9hdChhbHBoYSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3IsICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJDb2xvciBsaWtlIFsxMiwzMyw0NCwwLjRdXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICdyZ2JhJywgJ2hzdmEnLCAuLi5cclxuICogQHJldHVybiB7c3RyaW5nfSBSZXN1bHQgY29sb3IuIChJZiBpbnB1dCBpbGxlZ2FsLCByZXR1cm4gdW5kZWZpbmVkKS5cclxuICovXHJcbmNvbG9yVXRpbC5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoYXJyQ29sb3IsIHR5cGUpIHtcclxuICAgIGlmICghYXJyQ29sb3IgfHwgIWFyckNvbG9yLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjb2xvclN0ciA9IGFyckNvbG9yWzBdICsgJywnICsgYXJyQ29sb3JbMV0gKyAnLCcgKyBhcnJDb2xvclsyXTtcclxuICAgIGlmICh0eXBlID09PSAncmdiYScgfHwgdHlwZSA9PT0gJ2hzdmEnIHx8IHR5cGUgPT09ICdoc2xhJykge1xyXG4gICAgICAgIGNvbG9yU3RyICs9ICcsJyArIGFyckNvbG9yWzNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGUgKyAnKCcgKyBjb2xvclN0ciArICcpJztcclxufTtcclxuXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29sb3JVdGlsOyIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldERlZmluZUNvZGUoZGVmaW5lcykge1xyXG4gICAgdmFyIGRlZmluZUtleXMgPSBPYmplY3Qua2V5cyhkZWZpbmVzKTtcclxuICAgIGRlZmluZUtleXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmaW5lS2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBrZXkgPSBkZWZpbmVLZXlzW2ldO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluZXNba2V5XTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5ICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleSh2ZXJ0ZXhEZWZpbmVzLCBmcmFnbWVudERlZmluZXMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgZW5hYmxlZFRleHR1cmVzLnNvcnQoKTtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICBkZWZpbmVTdHIucHVzaChzeW1ib2wpO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGdldERlZmluZUNvZGUodmVydGV4RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0RGVmaW5lQ29kZShmcmFnbWVudERlZmluZXMpICsgJ1xcbidcclxuICAgICAgICArIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG4vKipcclxuICogTWF0ZXJpYWwgZGVmaW5lcyB0aGUgYXBwZWFyYW5jZSBvZiBtZXNoIHN1cmZhY2UsIGxpa2UgYGNvbG9yYCwgYHJvdWdobmVzc2AsIGBtZXRhbG5lc3NgLCBldGMuXHJcbiAqIEl0IGNvbnRhaW5zIGEge0BsaW5rIGNsYXkuU2hhZGVyfSBhbmQgY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgc3RhbmRhcmQgbWF0ZXJpYWxcclxuYGBganNcclxudmFyIG1hdGVyaWFsID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gICAgc2hhZGVyOiBuZXcgY2xheS5TaGFkZXIoXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnZlcnRleCcpLFxyXG4gICAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5mcmFnbWVudCcpXHJcbiAgICApXHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWF0ZXJpYWxcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBNYXRlcmlhbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIHVuaWZvcm1zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aFRlc3Q6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoTWFzazogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJsZW5kIGZ1bmMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBtYXRlcmlhbFxyXG4gICAgICAgICAqIGhhdmUgY3VzdG9tIGJsZW5kaW5nXHJcbiAgICAgICAgICogVGhlIGdsIGNvbnRleHQgd2lsbCBiZSB0aGUgb25seSBhcmd1bWVudCBwYXNzZWQgaW4gdGhvIHRoZVxyXG4gICAgICAgICAqIGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICogRGV0YWlsIG9mIGJsZW5kIGZ1bmN0aW9uIGluIFdlYkdMOlxyXG4gICAgICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZ2xlcy9zcGVjcy8yLjAvZXNfZnVsbF9zcGVjXzIuMC4yNS5wZGZcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEV4YW1wbGUgOlxyXG4gICAgICAgICAqIGZ1bmN0aW9uKF9nbCkge1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRFcXVhdGlvbihfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRGdW5jKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgKiB9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHVwZGF0ZSB0ZXh0dXJlIHN0YXR1cyBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9VcGRhdGVUZXh0dXJlU3RhdHVzOiB0cnVlLFxyXG5cclxuICAgICAgICB1bmlmb3Jtczoge30sXHJcbiAgICAgICAgdmVydGV4RGVmaW5lczoge30sXHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7fSxcclxuICAgICAgICBfdGV4dHVyZVN0YXR1czoge30sXHJcblxyXG4gICAgICAgIC8vIHNoYWRvd1RyYW5zcGFyZW50TWFwIDogbnVsbFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIGVuYWJsZSB0aGUgdW5pZm9ybSB0aGF0IG9ubHkgdXNlZCBpbiBzaGFkZXIuXHJcbiAgICAgICAgX2VuYWJsZWRVbmlmb3JtczogbnVsbCxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ01BVEVSSUFMXycgKyB0aGlzLl9fdWlkX187XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hhZGVyKSB7XHJcbiAgICAgICAgLy8gS2VlcCBzdGF0dXMsIG1haW5seSBwcmVzZXQgdW5pZm9ybXMsIHZlcnRleERlZmluZXMgYW5kIGZyYWdtZW50RGVmaW5lc1xyXG4gICAgICAgIHRoaXMuYXR0YWNoU2hhZGVyKHRoaXMuc2hhZGVyLCB0cnVlKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lk1hdGVyaWFsLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWF0ZXJpYWwgdW5pZm9ybVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBtYXQuc2V0VW5pZm9ybSgnY29sb3InLCBbMSwgMSwgMSwgMV0pO1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ8YXJyYXl8Y2xheS5UZXh0dXJlfEFycmF5QnVmZmVyVmlld30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuaWZvcm0gdmFsdWUgXCInICsgc3ltYm9sICsgJ1wiIGlzIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGNvbG9yLiBJbnZhbGlkIGNvbG9yIHN0cmluZyB3aWxsIHJldHVybiBudWxsLlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUNvbG9yKHZhbHVlKSB8fCB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdW5pZm9ybS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXMgJiYgdW5pZm9ybS50eXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybXM6IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVW5pZm9ybUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmluZGV4T2Yoc3ltYm9sKSA+PSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRFbmFibGVkVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zO1xyXG4gICAgfSxcclxuICAgIGdldFRleHR1cmVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlVW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygc2V0VW5pZm9ybSBhbmQgc2V0VW5pZm9ybXNcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSBbdmFsdWVdXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHN5bWJvbCkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBzeW1ib2xba2V5XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShzeW1ib2wsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdW5pZm9ybSB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fVxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRhY2ggYSBzaGFkZXIgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2hhZGVyfSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGtlZXBTdGF0dXMgSWYgdHJ5IHRvIGtlZXAgdW5pZm9ybSBhbmQgdGV4dHVyZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTaGFkZXI6IGZ1bmN0aW9uKHNoYWRlciwga2VlcFN0YXR1cykge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbFVuaWZvcm1zID0gdGhpcy51bmlmb3JtcztcclxuXHJcbiAgICAgICAgLy8gSWdub3JlIGlmIHVuaWZvcm0gY2FuIHVzZSBpbiBzaGFkZXIuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtcyA9IHNoYWRlci5jcmVhdGVVbmlmb3JtcygpO1xyXG4gICAgICAgIHRoaXMuc2hhZGVyID0gc2hhZGVyO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3JtcyA9IE9iamVjdC5rZXlzKHVuaWZvcm1zKTtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdW5pZm9ybXMgYXJlIHNldCBpbiBzYW1lIG9yZGVyIHRvIGF2b2lkIHRleHR1cmUgc2xvdCB3cm9uZ1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5zb3J0KCk7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVVuaWZvcm1zID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmZpbHRlcihmdW5jdGlvbiAodW5pZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3QnIHx8IHR5cGUgPT09ICd0dic7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHZhciBvcmlnaW5hbFZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcblxyXG4gICAgICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIuZnJhZ21lbnREZWZpbmVzKTtcclxuXHJcbiAgICAgICAgaWYgKGtlZXBTdGF0dXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIG9yaWdpbmFsVW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3Jtc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IG9yaWdpbmFsVW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLnZlcnRleERlZmluZXMsIG9yaWdpbmFsVmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHModGhpcy5mcmFnbWVudERlZmluZXMsIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNoYWRlci50ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICBzaGFkZXJUeXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS5zaGFkZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogc2hhZGVyLnRleHR1cmVzW2tleV0udHlwZSxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IChrZWVwU3RhdHVzICYmIHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XSkgPyB0aGlzLl90ZXh0dXJlU3RhdHVzW2tleV0uZW5hYmxlZCA6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU3RhdHVzID0gdGV4dHVyZVN0YXR1cztcclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IG1hdGVyaWFsIGFuZCBrZWVwIHVuaWZvcm1zLCBzaGFkZXIgd2lsbCBub3QgYmUgY2xvbmVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuc2hhZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gdGhpcy5kZXB0aE1hc2s7XHJcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xyXG4gICAgICAgIG1hdGVyaWFsLmJsZW5kID0gdGhpcy5ibGVuZDtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy52ZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHRoaXMuZnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlKHRoaXMuZ2V0RW5hYmxlZFRleHR1cmVzKCkpO1xyXG4gICAgICAgIG1hdGVyaWFsLnByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdmFyIHZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIGZyYWdtZW50RGVmaW5lcyA9IHRoaXMuZnJhZ21lbnREZWZpbmVzO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAndmVydGV4JyAmJiBzaGFkZXJUeXBlICE9PSAnZnJhZ21lbnQnICYmIHNoYWRlclR5cGUgIT09ICdib3RoJ1xyXG4gICAgICAgICAgICAmJiBhcmd1bWVudHMubGVuZ3RoIDwgM1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBzaGFkZXJUeXBlIGRlZmF1bHQgdG8gYmUgJ2JvdGgnXHJcbiAgICAgICAgICAgIHZhbCA9IHN5bWJvbDtcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gdmFsICE9IG51bGwgPyB2YWwgOiBudWxsO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAndmVydGV4JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzW3N5bWJvbF0gPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAvLyBNYXJrIGFzIGRpcnR5XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmIChmcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICBmcmFnbWVudERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIHVuZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAyXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ3ZlcnRleCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZWZpbmVkKCdmcmFnbWVudCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBtYWNybyBpcyBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBpc0RlZmluZWQ6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICAvLyBQRU5ESU5HIGhhc093blByb3BlcnR5ID9cclxuICAgICAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWNybyB2YWx1ZSBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBnZXREZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBzd2l0Y2goc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgYSB0ZXh0dXJlLCBhY3R1YWxseSBpdCB3aWxsIGFkZCBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGV4dHVyZSBzeW1ib2wgaXMgZGlmZnVzZU1hcCwgaXQgd2lsbCBhZGQgYSBsaW5lIGAjZGVmaW5lIERJRkZVU0VNQVBfRU5BQkxFRGAgaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBlbmFibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0VuYWJsZWQgPSBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cy5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmVzQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYSB0ZXh0dXJlLCBpdCByZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHRoZSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2xbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICB2YXIgaXNEaXNhYmxlZCA9ICEgc3RhdHVzLmVuYWJsZWQ7XHJcbiAgICAgICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYWxsIHRleHR1cmVzIHVzZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICovXHJcbiAgICBkaXNhYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIElmIHRleHR1cmUgb2YgZ2l2ZW4gdHlwZSBpcyBlbmFibGVkLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgc3ltYm9sXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1RleHR1cmVFbmFibGVkOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIHJldHVybiAhIXRleHR1cmVTdGF0dXNbc3ltYm9sXVxyXG4gICAgICAgICAgICAmJiB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxsIGVuYWJsZWQgdGV4dHVyZXNcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkVGV4dHVyZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5hYmxlZFRleHR1cmVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgZGVmaW5lcyBhcmUgdXBkYXRlZC5cclxuICAgICAqL1xyXG4gICAgZGlydHlEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9ncmFtS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSBnZXRQcm9ncmFtS2V5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzLCB0aGlzLmZyYWdtZW50RGVmaW5lcywgdGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbUtleTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRlcmlhbDtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG52YXIgU0hBREVSX1NUQVRFX1RPX0VOQUJMRSA9IDE7XHJcbnZhciBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEUgPSAyO1xyXG52YXIgU0hBREVSX1NUQVRFX1BFTkRJTkcgPSAzO1xyXG5cclxuLy8gRW5hYmxlIGF0dHJpYnV0ZSBvcGVyYXRpb24gaXMgZ2xvYmFsIHRvIGFsbCBwcm9ncmFtc1xyXG4vLyBIZXJlIHNhdmVkIHRoZSBsaXN0IG9mIGFsbCBlbmFibGVkIGF0dHJpYnV0ZSBpbmRleFxyXG4vLyBodHRwOi8vd3d3Lm1qYnNoYXcuY29tLzIwMTMvMDMvd2ViZ2wtZml4aW5nLWludmFsaWRvcGVyYXRpb24uaHRtbFxyXG52YXIgZW5hYmxlZEF0dHJpYnV0ZUxpc3QgPSB7fTtcclxuXHJcbi8vIHNvbWUgdXRpbCBmdW5jdGlvbnNcclxuZnVuY3Rpb24gYWRkTGluZU51bWJlcnMoc3RyaW5nKSB7XHJcbiAgICB2YXIgY2h1bmtzID0gc3RyaW5nLnNwbGl0KCdcXG4nKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBpbDsgaSArKykge1xyXG4gICAgICAgIC8vIENocm9tZSByZXBvcnRzIHNoYWRlciBlcnJvcnMgb24gbGluZXNcclxuICAgICAgICAvLyBzdGFydGluZyBjb3VudGluZyBmcm9tIDFcclxuICAgICAgICBjaHVua3NbaV0gPSAoaSArIDEpICsgJzogJyArIGNodW5rc1tpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaHVua3Muam9pbignXFxuJyk7XHJcbn1cclxuXHJcbi8vIFJldHVybiB0cnVlIG9yIGVycm9yIG1zZyBpZiBlcnJvciBoYXBwZW5lZFxyXG5mdW5jdGlvbiBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgc2hhZGVyLCBzaGFkZXJTdHJpbmcpIHtcclxuICAgIGlmICghX2dsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIF9nbC5DT01QSUxFX1NUQVRVUykpIHtcclxuICAgICAgICByZXR1cm4gW19nbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlciksIGFkZExpbmVOdW1iZXJzKHNoYWRlclN0cmluZyldLmpvaW4oJ1xcbicpO1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgdG1wRmxvYXQzMkFycmF5MTYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSgxNik7XHJcblxyXG52YXIgR0xQcm9ncmFtID0gQmFzZS5leHRlbmQoe1xyXG5cclxuICAgIHVuaWZvcm1TZW1hbnRpY3M6IHt9LFxyXG4gICAgYXR0cmlidXRlczoge31cclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xvY2F0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuXHJcbiAgICB0aGlzLl9wcm9ncmFtID0gbnVsbDtcclxufSwge1xyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuICAgICAgICByZW5kZXJlci5nbC51c2VQcm9ncmFtKHRoaXMuX3Byb2dyYW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoYXNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fbG9jYXRpb25zW3N5bWJvbF07XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uICE9PSBudWxsICYmIGxvY2F0aW9uICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHVzZVRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNsb3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5hY3RpdmVUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkUwICsgc2xvdCk7XHJcbiAgICAgICAgICAgIC8vIE1heWJlIHRleHR1cmUgaXMgbm90IGxvYWRlZCB5ZXQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNldFRleHR1cmVTbG90OiBmdW5jdGlvbiAoc2xvdCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gc2xvdCB8fCAwO1xyXG4gICAgfSxcclxuXHJcbiAgICB0YWtlQ3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVNsb3QgPSB0aGlzLl90ZXh0dXJlU2xvdDtcclxuXHJcbiAgICAgICAgdGhpcy51c2VUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZVNsb3QpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU2xvdCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChfZ2wsIHR5cGUsIHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25NYXBbc3ltYm9sXTtcclxuICAgICAgICAvLyBVbmlmb3JtIGlzIG5vdCBleGlzdGVkIGluIHRoZSBzaGFkZXJcclxuICAgICAgICBpZiAobG9jYXRpb24gPT09IG51bGwgfHwgbG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbTQnOlxyXG4gICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEZsb2F0MzJBcnJheSBpcyBtdWNoIGZhc3RlciB0aGFuIGFycmF5IHdoZW4gdW5pZm9ybU1hdHJpeDRmdi5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcEZsb2F0MzJBcnJheTE2W2ldID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wRmxvYXQzMkFycmF5MTY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcyaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2knOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGknOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20yJzpcclxuICAgICAgICAgICAgY2FzZSAnbTJ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20zJzpcclxuICAgICAgICAgICAgY2FzZSAnbTN2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ200dic6XHJcbiAgICAgICAgICAgICAgICAvLyBSYXcgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHZhbHVlLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yKytdID0gaXRlbVtqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIGFycmF5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyAgIC8vIEFycmF5QnVmZmVyVmlld1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRVbmlmb3JtT2ZTZW1hbnRpYzogZnVuY3Rpb24gKF9nbCwgc2VtYW50aWMsIHZhbCkge1xyXG4gICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgIGlmIChzZW1hbnRpY0luZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVzZWQgZm9yIGNyZWF0aW5nIFZBT1xyXG4gICAgLy8gRW5hYmxlIHRoZSBhdHRyaWJ1dGVzIHBhc3NlZCBpbiBhbmQgZGlzYWJsZSB0aGUgcmVzdFxyXG4gICAgLy8gRXhhbXBsZSBVc2FnZTpcclxuICAgIC8vIGVuYWJsZUF0dHJpYnV0ZXMocmVuZGVyZXIsIFtcInBvc2l0aW9uXCIsIFwidGV4Y29vcmRzXCJdKVxyXG4gICAgZW5hYmxlQXR0cmlidXRlczogZnVuY3Rpb24gKHJlbmRlcmVyLCBhdHRyaWJMaXN0LCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtO1xyXG5cclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcblxyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dDtcclxuICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dCA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0KSB7XHJcbiAgICAgICAgICAgIC8vIEluIHZlcnRleCBhcnJheSBvYmplY3QgY29udGV4dFxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEVhY2ggdmFvIG9iamVjdCBuZWVkcyB0byBlbmFibGUgYXR0cmlidXRlcyBhZ2Fpbj9cclxuICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IHZhby5fX2VuYWJsZWRBdHRyaWJ1dGVMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBlbmFibGVkQXR0cmlidXRlTGlzdFtyZW5kZXJlci5fX3VpZF9fXVxyXG4gICAgICAgICAgICAgICAgICAgID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmliTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gYXR0cmliTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBfZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIC8vIEF0dHJpYiBsb2NhdGlvbiBpcyBhIG51bWJlciBmcm9tIDAgdG8gLi4uXHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbk1hcFtzeW1ib2xdID0gbG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gbG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX1RPX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSA9IFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBzd2l0Y2goZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0pe1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFOlxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0gPSBTSEFERVJfU1RBVEVfUEVORElORztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIC8vIEV4cGlyZWRcclxuICAgICAgICAgICAgICAgIGNhc2UgU0hBREVSX1NUQVRFX1BFTkRJTkc6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbkxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIGJ1aWxkUHJvZ3JhbTogZnVuY3Rpb24gKF9nbCwgc2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlLCBmcmFnbWVudFNoYWRlckNvZGUpIHtcclxuICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuVkVSVEVYX1NIQURFUik7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSBfZ2wuY3JlYXRlUHJvZ3JhbSgpO1xyXG5cclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuRlJBR01FTlRfU0hBREVSKTtcclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIF9nbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIG1zZyA9IGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCB2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcbiAgICAgICAgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTtcclxuICAgICAgICBfZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcclxuICAgICAgICAvLyBGb3JjZSB0aGUgcG9zaXRpb24gYmluZCB0byBsb2NhdGlvbiAwO1xyXG4gICAgICAgIGlmIChzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1snUE9TSVRJT04nXS5zeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gRWxzZSBjaG9vc2UgYW4gYXR0cmlidXRlIGFuZCBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBrZXlzWzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSBjb2RlLlxyXG4gICAgICAgIHRoaXMudmVydGV4Q29kZSA9IHZlcnRleFNoYWRlckNvZGU7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudENvZGUgPSBmcmFnbWVudFNoYWRlckNvZGU7XHJcblxyXG4gICAgICAgIGlmICghX2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgX2dsLkxJTktfU1RBVFVTKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBsaW5rIHByb2dyYW1cXG4nICsgX2dsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgdW5pZm9ybSBsb2NhdGlvbnNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYWRlci51bmlmb3Jtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVN5bWJvbCA9IHNoYWRlci51bmlmb3Jtc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYXRpb25zW3VuaWZvcm1TeW1ib2xdID0gX2dsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtU3ltYm9sKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMUHJvZ3JhbTsiLCJpbXBvcnQgR0xQcm9ncmFtIGZyb20gJy4vR0xQcm9ncmFtJztcclxuXHJcbnZhciBsb29wUmVnZXggPSAvZm9yXFxzKj9cXChpbnRcXHMqP19pZHhfXFxzKlxcPVxccyooW1xcdy1dKylcXDtcXHMqX2lkeF9cXHMqPFxccyooW1xcdy1dKyk7XFxzKl9pZHhfXFxzKlxcK1xcK1xccypcXClcXHMqXFx7XFx7KFtcXHNcXFNdKz8pKD89XFx9XFx9KVxcfVxcfS9nO1xyXG5cclxuZnVuY3Rpb24gdW5yb2xsTG9vcChzaGFkZXJTdHIsIGRlZmluZXMsIGxpZ2h0c051bWJlcnMpIHtcclxuICAgIC8vIExvb3AgdW5yb2xsIGZyb20gdGhyZWUuanMsIGh0dHBzOi8vZ2l0aHViLmNvbS9tcmRvb2IvdGhyZWUuanMvYmxvYi9tYXN0ZXIvc3JjL3JlbmRlcmVycy93ZWJnbC9XZWJHTFByb2dyYW0uanMjTDE3NVxyXG4gICAgLy8gSW4gc29tZSBjYXNlIGxpa2Ugc2hhZG93TWFwIGluIGxvb3AgdXNlICdpJyB0byBpbmRleCB2YWx1ZSBtdWNoIHNsb3dlci5cclxuXHJcbiAgICAvLyBMb29wIHVzZSBfaWR4XyBhbmQgaW5jcmVhc2VkIHdpdGggX2lkeF8rKyB3aWxsIGJlIHVucm9sbGVkXHJcbiAgICAvLyBVc2Uge3sgfX0gdG8gbWF0Y2ggdGhlIHBhaXIgc28gdGhlIGlmIHN0YXRlbWVudCB3aWxsIG5vdCBiZSBhZmZlY3RlZFxyXG4gICAgLy8gV3JpdGUgbGlrZSBmb2xsb3dpbmdcclxuICAgIC8vIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCA0OyBfaWR4XysrKSB7e1xyXG4gICAgLy8gICAgIHZlYzMgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbX2lkeF9dLCB1dikucmdiO1xyXG4gICAgLy8gfX1cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2UobWF0Y2gsIHN0YXJ0LCBlbmQsIHNuaXBwZXQpIHtcclxuICAgICAgICB2YXIgdW5yb2xsID0gJyc7XHJcbiAgICAgICAgLy8gVHJ5IHRvIHRyZWF0IGFzIGRlZmluZVxyXG4gICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTmFOKGVuZCkpIHtcclxuICAgICAgICAgICAgaWYgKGVuZCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkZWZpbmVzW2VuZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBsaWdodE51bWJlckRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEVycm9yIGNoZWNraW5nXHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IHBhcnNlSW50KHN0YXJ0KTsgaWR4IDwgcGFyc2VJbnQoZW5kKTsgaWR4KyspIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBBZGQgc2NvcGU/XHJcbiAgICAgICAgICAgIHVucm9sbCArPSAneydcclxuICAgICAgICAgICAgICAgICsgc25pcHBldFxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9mbG9hdFxccypcXChcXHMqX2lkeF9cXHMqXFwpL2csIGlkeC50b0ZpeGVkKDEpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9faWR4Xy9nLCBpZHgpXHJcbiAgICAgICAgICAgICsgJ30nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVucm9sbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHROdW1iZXJEZWZpbmVzID0ge307XHJcbiAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgIGxpZ2h0TnVtYmVyRGVmaW5lc1tsaWdodFR5cGUgKyAnX0NPVU5UJ10gPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyLnJlcGxhY2UobG9vcFJlZ2V4LCByZXBsYWNlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGlmIChsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICAgICAgdmFyIGNvdW50ID0gbGlnaHRzTnVtYmVyc1tsaWdodFR5cGVdO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgbGlnaHRUeXBlLnRvVXBwZXJDYXNlKCkgKyAnX0NPVU5UICcgKyBjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbC50b1VwcGVyQ2FzZSgpICsgJ19FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbCArICcgJyArIHZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvZGUoZXh0cykge1xyXG4gICAgLy8gRXh0ZW5zaW9uIGRlY2xhcmF0aW9uIG11c3QgYmVmb3JlIGFsbCBub24tcHJlcHJvY2Vzc29yIGNvZGVzXHJcbiAgICAvLyBUT0RPIHZlcnRleCA/IGV4dGVuc2lvbiBlbnVtID9cclxuICAgIHZhciBleHRlbnNpb25TdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGV4dGVuc2lvblN0ci5wdXNoKCcjZXh0ZW5zaW9uIEdMXycgKyBleHRzW2ldICsgJyA6IGVuYWJsZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4dGVuc2lvblN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJlY2lzaW9uQ29kZShwcmVjaXNpb24pIHtcclxuICAgIHJldHVybiBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2Zsb2F0J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgKyBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2ludCddLmpvaW4oJyAnKSArICc7XFxuJ1xyXG4gICAgICAgIC8vIGRlcHRoIHRleHR1cmUgbWF5IGhhdmUgcHJlY2lzaW9uIHByb2JsZW0gb24gaU9TIGRldmljZS5cclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnc2FtcGxlcjJEJ10uam9pbignICcpICsgJztcXG4nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQcm9ncmFtTWFuYWdlcihyZW5kZXJlcikge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICAgIHRoaXMuX2NhY2hlID0ge307XHJcbn1cclxuXHJcblByb2dyYW1NYW5hZ2VyLnByb3RvdHlwZS5nZXRQcm9ncmFtID0gZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICB2YXIga2V5ID0gJ3MnICsgbWF0ZXJpYWwuc2hhZGVyLnNoYWRlcklEICsgJ20nICsgbWF0ZXJpYWwuZ2V0UHJvZ3JhbUtleSgpO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAga2V5ICs9ICdzZScgKyBzY2VuZS5nZXRQcm9ncmFtS2V5KHJlbmRlcmFibGUubGlnaHRHcm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIGtleSArPSAnLCcgKyByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YXIgcHJvZ3JhbSA9IGNhY2hlW2tleV07XHJcblxyXG4gICAgaWYgKHByb2dyYW0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHRzTnVtYmVycyA9IHNjZW5lID8gc2NlbmUuZ2V0TGlnaHRzTnVtYmVycyhyZW5kZXJhYmxlLmxpZ2h0R3JvdXApIDoge307XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcclxuICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVGV4dHVyZXMoKTtcclxuICAgIHZhciBza2luRGVmaW5lQ29kZSA9ICcnO1xyXG4gICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICB2YXIgc2tpbkRlZmluZXMgPSB7XHJcbiAgICAgICAgICAgIFNLSU5OSU5HOiBudWxsLFxyXG4gICAgICAgICAgICBKT0lOVF9DT1VOVDogcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICBza2luRGVmaW5lcy5VU0VfU0tJTl9NQVRSSUNFU19URVhUVVJFID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBBZGQgc2tpbm5pbmcgY29kZT9cclxuICAgICAgICBza2luRGVmaW5lQ29kZSA9ICdcXG4nICsgZ2V0RGVmaW5lQ29kZShza2luRGVmaW5lcykgKyAnXFxuJztcclxuICAgIH1cclxuICAgIC8vIFRPRE8gT3B0aW1pemUga2V5IGdlbmVyYXRpb25cclxuICAgIC8vIFZFUlRFWFxyXG4gICAgdmFyIHZlcnRleERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpO1xyXG4gICAgLy8gRlJBR01FTlRcclxuICAgIHZhciBmcmFnbWVudERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcblxyXG4gICAgdmFyIHZlcnRleENvZGUgPSB2ZXJ0ZXhEZWZpbmVTdHIgKyAnXFxuJyArIG1hdGVyaWFsLnNoYWRlci52ZXJ0ZXg7XHJcblxyXG4gICAgdmFyIGV4dGVuc2lvbnMgPSBbXHJcbiAgICAgICAgJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycsXHJcbiAgICAgICAgJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnXHJcbiAgICBdLmZpbHRlcihmdW5jdGlvbiAoZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKGV4dCkgIT0gbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9URVhUVVJFX0xPRCc7XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0ZW5zaW9ucy5pbmRleE9mKCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFUyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYWdtZW50Q29kZSA9IGdldEV4dGVuc2lvbkNvZGUoZXh0ZW5zaW9ucykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0UHJlY2lzaW9uQ29kZShtYXRlcmlhbC5wcmVjaXNpb24pICsgJ1xcbidcclxuICAgICAgICArIGZyYWdtZW50RGVmaW5lU3RyICsgJ1xcbidcclxuICAgICAgICArIG1hdGVyaWFsLnNoYWRlci5mcmFnbWVudDtcclxuXHJcbiAgICB2YXIgZmluYWxWZXJ0ZXhDb2RlID0gdW5yb2xsTG9vcCh2ZXJ0ZXhDb2RlLCBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzKTtcclxuICAgIHZhciBmaW5hbEZyYWdtZW50Q29kZSA9IHVucm9sbExvb3AoZnJhZ21lbnRDb2RlLCBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG5cclxuICAgIHZhciBwcm9ncmFtID0gbmV3IEdMUHJvZ3JhbSgpO1xyXG4gICAgcHJvZ3JhbS51bmlmb3JtU2VtYW50aWNzID0gbWF0ZXJpYWwuc2hhZGVyLnVuaWZvcm1TZW1hbnRpY3M7XHJcbiAgICBwcm9ncmFtLmF0dHJpYnV0ZXMgPSBtYXRlcmlhbC5zaGFkZXIuYXR0cmlidXRlcztcclxuICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uYnVpbGRQcm9ncmFtKF9nbCwgbWF0ZXJpYWwuc2hhZGVyLCBmaW5hbFZlcnRleENvZGUsIGZpbmFsRnJhZ21lbnRDb2RlKTtcclxuICAgIHByb2dyYW0uX19lcnJvciA9IGVycm9yTXNnO1xyXG5cclxuICAgIGNhY2hlW2tleV0gPSBwcm9ncmFtO1xyXG5cclxuICAgIHJldHVybiBwcm9ncmFtO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUHJvZ3JhbU1hbmFnZXI7IiwiLyoqXHJcbiAqIE1haW5seSBkbyB0aGUgcGFyc2UgYW5kIGNvbXBpbGUgb2Ygc2hhZGVyIHN0cmluZ1xyXG4gKiBTdXBwb3J0IHNoYWRlciBjb2RlIGNodW5rIGltcG9ydCBhbmQgZXhwb3J0XHJcbiAqIFN1cHBvcnQgc2hhZGVyIHNlbWFudGljc1xyXG4gKiBodHRwOi8vd3d3Lm52aWRpYS5jb20vb2JqZWN0L3VzaW5nX3Nhcy5odG1sXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvY29sbGFkYTJqc29uL2lzc3Vlcy80NVxyXG4gKi9cclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHVuaWZvcm1SZWdleCA9IC91bmlmb3JtXFxzKyhib29sfGZsb2F0fGludHx2ZWMyfHZlYzN8dmVjNHxpdmVjMnxpdmVjM3xpdmVjNHxtYXQyfG1hdDN8bWF0NHxzYW1wbGVyMkR8c2FtcGxlckN1YmUpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxudmFyIGF0dHJpYnV0ZVJlZ2V4ID0gL2F0dHJpYnV0ZVxccysoZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0KVxccysoW1xcc1xcU10qPyk7L2c7XHJcbi8vIE9ubHkgcGFyc2UgbnVtYmVyIGRlZmluZS5cclxudmFyIGRlZmluZVJlZ2V4ID0gLyNkZWZpbmVcXHMrKFxcdyspPyhcXHMrW1xcZC0uXSspP1xccyo7P1xccypcXG4vZztcclxuXHJcbnZhciB1bmlmb3JtVHlwZU1hcCA9IHtcclxuICAgICdib29sJzogJzFpJyxcclxuICAgICdpbnQnOiAnMWknLFxyXG4gICAgJ3NhbXBsZXIyRCc6ICd0JyxcclxuICAgICdzYW1wbGVyQ3ViZSc6ICd0JyxcclxuICAgICdmbG9hdCc6ICcxZicsXHJcbiAgICAndmVjMic6ICcyZicsXHJcbiAgICAndmVjMyc6ICczZicsXHJcbiAgICAndmVjNCc6ICc0ZicsXHJcbiAgICAnaXZlYzInOiAnMmknLFxyXG4gICAgJ2l2ZWMzJzogJzNpJyxcclxuICAgICdpdmVjNCc6ICc0aScsXHJcbiAgICAnbWF0Mic6ICdtMicsXHJcbiAgICAnbWF0Myc6ICdtMycsXHJcbiAgICAnbWF0NCc6ICdtNCdcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVplcm9BcnJheShsZW4pIHtcclxuICAgIHZhciBhcnIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBhcnJbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxufVxyXG5cclxudmFyIHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yID0ge1xyXG4gICAgJ2Jvb2wnOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxyXG4gICAgJ2ludCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnZmxvYXQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiAwOyB9LFxyXG4gICAgJ3NhbXBsZXIyRCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcbiAgICAnc2FtcGxlckN1YmUnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9LFxyXG5cclxuICAgICd2ZWMyJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDIpOyB9LFxyXG4gICAgJ3ZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAndmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnaXZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAnaXZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAnaXZlYzQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcblxyXG4gICAgJ21hdDInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcbiAgICAnbWF0Myc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg5KTsgfSxcclxuICAgICdtYXQ0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDE2KTsgfSxcclxuXHJcbiAgICAnYXJyYXknOiBmdW5jdGlvbiAoKSB7IHJldHVybiBbXTsgfVxyXG59O1xyXG5cclxudmFyIGF0dHJpYnV0ZVNlbWFudGljcyA9IFtcclxuICAgICdQT1NJVElPTicsXHJcbiAgICAnTk9STUFMJyxcclxuICAgICdCSU5PUk1BTCcsXHJcbiAgICAnVEFOR0VOVCcsXHJcbiAgICAnVEVYQ09PUkQnLFxyXG4gICAgJ1RFWENPT1JEXzAnLFxyXG4gICAgJ1RFWENPT1JEXzEnLFxyXG4gICAgJ0NPTE9SJyxcclxuICAgIC8vIFNraW5uaW5nXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWQjc2VtYW50aWNzXHJcbiAgICAnSk9JTlQnLFxyXG4gICAgJ1dFSUdIVCdcclxuXTtcclxudmFyIHVuaWZvcm1TZW1hbnRpY3MgPSBbXHJcbiAgICAnU0tJTl9NQVRSSVgnLFxyXG4gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdmlld3BvcnRcclxuICAgICdWSUVXUE9SVF9TSVpFJyxcclxuICAgICdWSUVXUE9SVCcsXHJcbiAgICAnREVWSUNFUElYRUxSQVRJTycsXHJcbiAgICAvLyBXaW5kb3cgc2l6ZSBmb3Igd2luZG93IHJlbGF0aXZlIGNvb3JkaW5hdGVcclxuICAgIC8vIGh0dHBzOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuL2h0bWwvZ2xfRnJhZ0Nvb3JkLnhodG1sXHJcbiAgICAnV0lORE9XX1NJWkUnLFxyXG4gICAgLy8gSW5mb21hdGlvbiBhYm91dCBjYW1lcmFcclxuICAgICdORUFSJyxcclxuICAgICdGQVInLFxyXG4gICAgLy8gVGltZVxyXG4gICAgJ1RJTUUnXHJcbl07XHJcbnZhciBtYXRyaXhTZW1hbnRpY3MgPSBbXHJcbiAgICAnV09STEQnLFxyXG4gICAgJ1ZJRVcnLFxyXG4gICAgJ1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFVycsXHJcbiAgICAnVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxESU5WRVJTRScsXHJcbiAgICAnVklFV0lOVkVSU0UnLFxyXG4gICAgJ1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFZJRVdJTlZFUlNFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFRSQU5TUE9TRScsXHJcbiAgICAnVklFV1RSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXVFJBTlNQT1NFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnXHJcbl07XHJcblxyXG52YXIgYXR0cmlidXRlU2l6ZU1hcCA9IHtcclxuICAgIC8vIFdlYkdMIGRvZXMgbm90IHN1cHBvcnQgaW50ZWdlciBhdHRyaWJ1dGVzXHJcbiAgICAndmVjNCc6IDQsXHJcbiAgICAndmVjMyc6IDMsXHJcbiAgICAndmVjMic6IDIsXHJcbiAgICAnZmxvYXQnOiAxXHJcbn07XHJcblxyXG5cclxudmFyIHNoYWRlcklEQ2FjaGUgPSB7fTtcclxudmFyIHNoYWRlckNvZGVDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgdmFyIGtleSA9ICd2ZXJ0ZXg6JyArIHZlcnRleCArICdmcmFnbWVudDonICsgZnJhZ21lbnQ7XHJcbiAgICBpZiAoc2hhZGVySURDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNoYWRlcklEQ2FjaGVba2V5XTtcclxuICAgIH1cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgc2hhZGVySURDYWNoZVtrZXldID0gaWQ7XHJcblxyXG4gICAgc2hhZGVyQ29kZUNhY2hlW2lkXSA9IHtcclxuICAgICAgICB2ZXJ0ZXg6IHZlcnRleCxcclxuICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDb21tZW50KGNvZGUpIHtcclxuICAgIHJldHVybiBjb2RlLnJlcGxhY2UoL1sgXFx0XSpcXC9cXC8uKlxcbi9nLCAnJyApICAgLy8gcmVtb3ZlIC8vXHJcbiAgICAgICAgLnJlcGxhY2UoL1sgXFx0XSpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2csICcnICk7IC8vIHJlbW92ZSAvKiAqL1xyXG59XHJcblxyXG5mdW5jdGlvbiBsb2dTeW50YXhFcnJvcigpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoJ1dyb25nIHVuaWZvcm0vYXR0cmlidXRlcyBzeW50YXgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgbGluZSkge1xyXG4gICAgdmFyIHNwZXJhdG9yc1JlZ2V4cCA9IC9bLD1cXChcXCk6XS87XHJcbiAgICB2YXIgdG9rZW5zID0gbGluZVxyXG4gICAgICAgIC8vIENvbnZlcnQgYHN5bWJvbDogWzEsMiwzXWAgdG8gYHN5bWJvbDogdmVjMygxLDIsMylgXHJcbiAgICAgICAgLnJlcGxhY2UoLzpcXHMqXFxbXFxzKiguKilcXHMqXFxdL2csICc9JyArIHR5cGUgKyAnKCQxKScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJycpXHJcbiAgICAgICAgLnNwbGl0KC8oPz1bLD1cXChcXCk6XSkvZyk7XHJcblxyXG4gICAgdmFyIG5ld1Rva2VucyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodG9rZW5zW2ldLm1hdGNoKHNwZXJhdG9yc1JlZ2V4cCkpIHtcclxuICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uY2hhckF0KDApLFxyXG4gICAgICAgICAgICAgICAgdG9rZW5zW2ldLnNsaWNlKDEpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRva2VucyA9IG5ld1Rva2VucztcclxuXHJcbiAgICB2YXIgVFlQRV9TWU1CT0wgPSAwO1xyXG4gICAgdmFyIFRZUEVfQVNTSUdOID0gMTtcclxuICAgIHZhciBUWVBFX1ZFQyA9IDI7XHJcbiAgICB2YXIgVFlQRV9BUlIgPSAzO1xyXG4gICAgdmFyIFRZUEVfU0VNQU5USUMgPSA0O1xyXG4gICAgdmFyIFRZUEVfTk9STUFMID0gNTtcclxuXHJcbiAgICB2YXIgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB2YXIgZGVjbGFyYXRpb25zID0ge307XHJcbiAgICB2YXIgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICB2YXIgY3VycmVudERlY2xhcmF0aW9uO1xyXG5cclxuICAgIGFkZFN5bWJvbCh0b2tlbnNbMF0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFkZFN5bWJvbChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoIXN5bWJvbCkge1xyXG4gICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXJyUmVzdWx0ID0gc3ltYm9sLm1hdGNoKC9cXFsoLio/KVxcXS8pO1xyXG4gICAgICAgIGN1cnJlbnREZWNsYXJhdGlvbiA9IHN5bWJvbC5yZXBsYWNlKC9cXFsoLio/KVxcXS8sICcnKTtcclxuICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXSA9IHt9O1xyXG4gICAgICAgIGlmIChhcnJSZXN1bHQpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaXNBcnJheSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmFycmF5U2l6ZSA9IGFyclJlc3VsdFsxXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XHJcbiAgICAgICAgaWYgKCF0b2tlbikgeyAgIC8vIEVtcHR5IHRva2VuO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRva2VuID09PSAnPScpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9TWU1CT0xcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX0FSUikge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfQVNTSUdOO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnOicpIHtcclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9TRU1BTlRJQztcclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJywnKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgPT09IFRZUEVfVkVDKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUucHVzaCgrdG9rZW5zWysraV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9OT1JNQUw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJyknKSB7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoZGVjbGFyYXRpb25WYWx1ZSk7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbi5pbmRleE9mKCd2ZWMnKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgIT09IFRZUEVfQVNTSUdOXHJcbiAgICAgICAgICAgIC8vIENvbXBhdGl0YWJsZSB3aXRoIG9sZCBzeW50YXggYHN5bWJvbDogWzEsMiwzXWBcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9WRUM7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9BU1NJR04pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSB0b2tlbiA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBwYXJzZUZsb2F0KHRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9TRU1BTlRJQykge1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB0b2tlbjtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICAgICB8fCB1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uc2VtYW50aWMgPSBzZW1hbnRpYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ2lnbm9yZScgfHwgc2VtYW50aWMgPT09ICd1bmNvbmZpZ3VyYWJsZScpIHtcclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmlnbm9yZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgYSBkZWZhdWx0IHR2YWx1ZS5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHNlbWFudGljID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQoc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJlYXQgYXMgc3ltYm9sLlxyXG4gICAgICAgIGFkZFN5bWJvbCh0b2tlbik7XHJcbiAgICAgICAgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9ucztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGFsaWFzIGNsYXkuU2hhZGVyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50XHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIHBob25nIHNoYWRlclxyXG4gKiB2YXIgc2hhZGVyID0gbmV3IGNsYXkuU2hhZGVyKFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSxcclxuICogICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKVxyXG4gKiApO1xyXG4gKi9cclxuZnVuY3Rpb24gU2hhZGVyKHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIC8vIEZpcnN0IGFyZ3VtZW50IGNhbiBiZSB7IHZlcnRleCwgZnJhZ21lbnQgfVxyXG4gICAgaWYgKHR5cGVvZiB2ZXJ0ZXggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgZnJhZ21lbnQgPSB2ZXJ0ZXguZnJhZ21lbnQ7XHJcbiAgICAgICAgdmVydGV4ID0gdmVydGV4LnZlcnRleDtcclxuICAgIH1cclxuXHJcbiAgICB2ZXJ0ZXggPSByZW1vdmVDb21tZW50KHZlcnRleCk7XHJcbiAgICBmcmFnbWVudCA9IHJlbW92ZUNvbW1lbnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIHRoaXMuX3NoYWRlcklEID0gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh2ZXJ0ZXgpO1xyXG4gICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KGZyYWdtZW50KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY3MgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY0tleXMgPSBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVRlbXBsYXRlcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRleHR1cmVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRleERlZmluZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0ge307XHJcblxyXG4gICAgdGhpcy5fcGFyc2VBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLl9wYXJzZVVuaWZvcm1zKCk7XHJcbiAgICB0aGlzLl9wYXJzZURlZmluZXMoKTtcclxufVxyXG5cclxuU2hhZGVyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogU2hhZGVyLFxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyB1bmlmb3JtIGluc3RhbmNlIGZvciBtYXRlcmlhbFxyXG4gICAgY3JlYXRlVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybVRlbXBsYXRlcyl7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gdGhpcy51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHBsLnR5cGUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5pZm9ybVRwbC52YWx1ZSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUltcG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQodGhpcy52ZXJ0ZXgpO1xyXG4gICAgICAgIHRoaXMuX2ZyYWdtZW50Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLmZyYWdtZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbWFudGljVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdW5pZm9ybVR5cGUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgLy8gVGhpcyBjYXNlIGlzIG9ubHkgZm9yIFNLSU5fTUFUUklYXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBpc1RyYW5zcG9zZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICBpZiAoc2VtYW50aWMubWF0Y2goL1RSQU5TUE9TRSQvKSkge1xyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljLnNsaWNlKDAsIC05KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2U6IGlzVHJhbnNwb3NlLFxyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZTogc2VtYW50aWNOb1RyYW5zcG9zZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy51bmlmb3JtU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRNYXRlcmlhbFVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLCBpc0FycmF5LCBtYXRlcmlhbFVuaWZvcm1zKSB7XHJcbiAgICAgICAgbWF0ZXJpYWxVbmlmb3Jtc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZSxcclxuICAgICAgICAgICAgdmFsdWU6IGlzQXJyYXkgPyB1bmlmb3JtVmFsdWVDb25zdHJ1Y3RvclsnYXJyYXknXSA6IChkZWZhdWx0VmFsdWVGdW5jIHx8IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yW3R5cGVdKSxcclxuICAgICAgICAgICAgc2VtYW50aWM6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xyXG4gICAgICAgIHRoaXMuX3VuaWZvcm1MaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcblxyXG4gICAgICAgIHNlbGYubWF0cml4U2VtYW50aWNLZXlzID0gT2JqZWN0LmtleXModGhpcy5tYXRyaXhTZW1hbnRpY3MpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBtYWtlRGVmYXVsdFZhbHVlRnVuYyh2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9IDogbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF91bmlmb3JtUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRVbmlmb3JtcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkVW5pZm9ybXMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybUluZm8gPSBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB1bmlmb3JtSW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciB0bXBTdHIgPSBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSB1bmlmb3JtVHlwZU1hcFt0eXBlXTtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0VmFsdWVGdW5jID0gbWFrZURlZmF1bHRWYWx1ZUZ1bmMoZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcFN0ciArPSAnWycgKyBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uYXJyYXlTaXplICsgJ10nO1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1UeXBlICs9ICd2JztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtTWFpblN0ci5wdXNoKHRtcFN0cik7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fdW5pZm9ybUxpc3QucHVzaChzeW1ib2wpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybUluZm8uaWdub3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzYW1wbGVyMkQnIHx8IHR5cGUgPT09ICdzYW1wbGVyQ3ViZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBpcyBkZWZhdWx0IGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dHVyZXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBTaG91bGQgbm90IGRlY2xhcmUgbXVsdGlwbGUgc3ltYm9scyBpZiBoYXZlIHNlbWFudGljLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTZW1hbnRpY1VuaWZvcm0oc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkTWF0ZXJpYWxVbmlmb3JtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLCB0eXBlLCB1bmlmb3JtVHlwZSwgZGVmYXVsdFZhbHVlRnVuYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5LCB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybU1haW5TdHIubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgPyAndW5pZm9ybSAnICsgdHlwZSArICcgJyArIHVuaWZvcm1NYWluU3RyLmpvaW4oJywnKSArICc7XFxuJyA6ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGF0dHJpYnV0ZVJlZ2V4LCBfYXR0cmlidXRlUGFyc2VyKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2F0dHJpYnV0ZVBhcnNlcihzdHIsIHR5cGUsIGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGRlY2xhcmVkQXR0cmlidXRlcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVTaXplTWFwW3R5cGVdIHx8IDE7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVNYWluU3RyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWNsYXJlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IGRlY2xhcmVkQXR0cmlidXRlc1tzeW1ib2xdLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gQ2FuIG9ubHkgYmUgZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZmxvYXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VtYW50aWM6IHNlbWFudGljIHx8IG51bGxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biBzZW1hbnRpYyBcIicgKyBzZW1hbnRpYyArICdcIicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdHRyaWJ1dGVTZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTWFpblN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnYXR0cmlidXRlICcgKyB0eXBlICsgJyAnICsgYXR0cmlidXRlTWFpblN0ci5qb2luKCcsJykgKyAnO1xcbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UoZGVmaW5lUmVnZXgsIF9kZWZpbmVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUGFyc2VyKHN0ciwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgZGVmaW5lcyA9IHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnID8gc2VsZi52ZXJ0ZXhEZWZpbmVzIDogc2VsZi5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgICAgIGlmICghZGVmaW5lc1tzeW1ib2xdKSB7IC8vIEhhdmVuJ3QgYmVlbiBkZWZpbmVkIGJ5IHVzZXJcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVzW3N5bWJvbF0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW4gcGFyc2UgdG8gZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpID8gdmFsdWUudHJpbSgpIDogcGFyc2VGbG9hdCh2YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHNoYWRlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvZGUgPSBzaGFkZXJDb2RlQ2FjaGVbdGhpcy5fc2hhZGVySURdO1xyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGNvZGUudmVydGV4LCBjb2RlLmZyYWdtZW50KTtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdzaGFkZXJJRCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRlcklEO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd2ZXJ0ZXgnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92ZXJ0ZXhDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdmcmFnbWVudCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYWdtZW50Q29kZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAndW5pZm9ybXMnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91bmlmb3JtTGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxudmFyIGltcG9ydFJlZ2V4ID0gLyhAaW1wb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKikvZztcclxuU2hhZGVyLnBhcnNlSW1wb3J0ID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyID0gc2hhZGVyU3RyLnJlcGxhY2UoaW1wb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGltcG9ydFN5bWJvbCwgaW1wb3J0TmFtZSkge1xyXG4gICAgICAgIHZhciBzdHIgPSBTaGFkZXIuc291cmNlKGltcG9ydE5hbWUpO1xyXG4gICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcGFyc2VcclxuICAgICAgICAgICAgcmV0dXJuIFNoYWRlci5wYXJzZUltcG9ydChzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIGNodW5rIFwiJyArIGltcG9ydE5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyO1xyXG59O1xyXG5cclxudmFyIGV4cG9ydFJlZ2V4ID0gLyhAZXhwb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKilcXHMqXFxuKFtcXHNcXFNdKj8pQGVuZC9nO1xyXG5cclxuLyoqXHJcbiAqIEltcG9ydCBzaGFkZXIgc291cmNlXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyWydpbXBvcnQnXSA9IGZ1bmN0aW9uIChzaGFkZXJTdHIpIHtcclxuICAgIHNoYWRlclN0ci5yZXBsYWNlKGV4cG9ydFJlZ2V4LCBmdW5jdGlvbiAoc3RyLCBleHBvcnRTeW1ib2wsIGV4cG9ydE5hbWUsIGNvZGUpIHtcclxuICAgICAgICB2YXIgY29kZSA9IGNvZGUucmVwbGFjZSgvKF5bXFxzXFx0XFx4YTBcXHUzMDAwXSspfChbXFx1MzAwMFxceGEwXFxzXFx0XStcXHgyNCkvZywgJycpO1xyXG4gICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IGV4cG9ydE5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIga2V5O1xyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ialtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGtleSA9IHBhcnRzW2ldO1xyXG4gICAgICAgICAgICBvYmpba2V5XSA9IGNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2RlO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTGlicmFyeSB0byBzdG9yZSBhbGwgdGhlIGxvYWRlZCBzaGFkZXIgY29kZXNcclxuICogQHR5cGUge09iamVjdH1cclxuICogQHJlYWRPbmx5XHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyLmNvZGVzID0ge307XHJcblxyXG4vKipcclxuICogR2V0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcblNoYWRlci5zb3VyY2UgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgIHZhciBpID0gMDtcclxuICAgIHdoaWxlIChvYmogJiYgaSA8IHBhcnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBrZXkgPSBwYXJ0c1tpKytdO1xyXG4gICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgLy8gRklYTUUgVXNlIGRlZmF1bHQgaW5zdGVhZFxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBcIicgKyBuYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZGVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wcmV6LnZlcnRleFxcbnVuaWZvcm0gbWF0NCBXVlAgOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvcyA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2IDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgOiBbMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA6IFswLjAsIDAuMF07XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIFAgPSBwb3M7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBQID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gV1ZQICogdmVjNChQLCAxLjApO1xcbiB2X1RleGNvb3JkID0gdXYgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnByZXouZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBpZiAodGV4dHVyZTJEKGFscGhhTWFwLCB2X1RleGNvb3JkKS5hIDw9IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwwLjAsMC4wLDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7R0xNQVRfRVBTSUxPTiwgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgNHg0IE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQ0XHJcbiAqL1xyXG5cclxudmFyIG1hdDQgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcclxuICpcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgb3V0WzldID0gYVs5XTtcclxuICAgIG91dFsxMF0gPSBhWzEwXTtcclxuICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQ0IHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xyXG4gICAgaWYgKG91dCA9PT0gYSkge1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgICAgICBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGEwMTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGEwMjtcclxuICAgICAgICBvdXRbOV0gPSBhMTI7XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhMDM7XHJcbiAgICAgICAgb3V0WzEzXSA9IGExMztcclxuICAgICAgICBvdXRbMTRdID0gYTIzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbNF07XHJcbiAgICAgICAgb3V0WzJdID0gYVs4XTtcclxuICAgICAgICBvdXRbM10gPSBhWzEyXTtcclxuICAgICAgICBvdXRbNF0gPSBhWzFdO1xyXG4gICAgICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdID0gYVs5XTtcclxuICAgICAgICBvdXRbN10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbOF0gPSBhWzJdO1xyXG4gICAgICAgIG91dFs5XSA9IGFbNl07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTJdID0gYVszXTtcclxuICAgICAgICBvdXRbMTNdID0gYVs3XTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxMV07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcclxuICAgIG91dFsxXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAoYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs0XSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMjAgKiBiMDUgLSBhMjIgKiBiMDIgKyBhMjMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XHJcbiAgICBvdXRbOV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxMF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMl0gPSAoYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxM10gPSAoYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxNV0gPSAoYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICBvdXRbMF0gID0gIChhMTEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzFdICA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFsyXSAgPSAgKGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbM10gID0gLShhMDEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzRdICA9IC0oYTEwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcclxuICAgIG91dFs1XSAgPSAgKGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XHJcbiAgICBvdXRbNl0gID0gLShhMDAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzddICA9ICAoYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFs4XSAgPSAgKGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSk7XHJcbiAgICBvdXRbOV0gID0gLShhMDAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkpO1xyXG4gICAgb3V0WzEwXSA9ICAoYTAwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XHJcbiAgICBvdXRbMTJdID0gLShhMTAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkpO1xyXG4gICAgb3V0WzEzXSA9ICAoYTAwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpKTtcclxuICAgIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICBvdXRbMTVdID0gIChhMDAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSkpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXHJcbm1hdDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgIHJldHVybiBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0NCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcclxuICAgIHZhciBiMCAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzNdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07IGIzID0gYls3XTtcclxuICAgIG91dFs0XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs1XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFs2XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFs3XSA9IGIwKmEwMyArIGIxKmExMyArIGIyKmEyMyArIGIzKmEzMztcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTsgYjMgPSBiWzExXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTFdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07IGIzID0gYlsxNV07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTVdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBhZmZpbmUgbWF0NCdzXHJcbiAqIEFkZCBieSBodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZ1xyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm11bHRpcGx5QWZmaW5lID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzNdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzddID0gMDtcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdO1xyXG4gICAgb3V0WzEyXSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGEzMDtcclxuICAgIG91dFsxM10gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBhMzE7XHJcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYTMyO1xyXG4gICAgLy8gb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQ0Lm11bCA9IG1hdDQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5QWZmaW5lfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsQWZmaW5lID0gbWF0NC5tdWx0aXBseUFmZmluZTtcclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDQgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXSxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMztcclxuXHJcbiAgICBpZiAoYSA9PT0gb3V0KSB7XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGEwMCA9IGFbMF07IGEwMSA9IGFbMV07IGEwMiA9IGFbMl07IGEwMyA9IGFbM107XHJcbiAgICAgICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgICAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgICAgIG91dFswXSA9IGEwMDsgb3V0WzFdID0gYTAxOyBvdXRbMl0gPSBhMDI7IG91dFszXSA9IGEwMztcclxuICAgICAgICBvdXRbNF0gPSBhMTA7IG91dFs1XSA9IGExMTsgb3V0WzZdID0gYTEyOyBvdXRbN10gPSBhMTM7XHJcbiAgICAgICAgb3V0WzhdID0gYTIwOyBvdXRbOV0gPSBhMjE7IG91dFsxMF0gPSBhMjI7IG91dFsxMV0gPSBhMjM7XHJcblxyXG4gICAgICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGEwMiAqIHggKyBhMTIgKiB5ICsgYTIyICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdGhlIHZlYzMgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqKi9cclxubWF0NC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXSwgeiA9IHZbMl07XHJcblxyXG4gICAgb3V0WzBdID0gYVswXSAqIHg7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogeDtcclxuICAgIG91dFsyXSA9IGFbMl0gKiB4O1xyXG4gICAgb3V0WzNdID0gYVszXSAqIHg7XHJcbiAgICBvdXRbNF0gPSBhWzRdICogeTtcclxuICAgIG91dFs1XSA9IGFbNV0gKiB5O1xyXG4gICAgb3V0WzZdID0gYVs2XSAqIHk7XHJcbiAgICBvdXRbN10gPSBhWzddICogeTtcclxuICAgIG91dFs4XSA9IGFbOF0gKiB6O1xyXG4gICAgb3V0WzldID0gYVs5XSAqIHo7XHJcbiAgICBvdXRbMTBdID0gYVsxMF0gKiB6O1xyXG4gICAgb3V0WzExXSA9IGFbMTFdICogejtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCwgYXhpcykge1xyXG4gICAgdmFyIHggPSBheGlzWzBdLCB5ID0gYXhpc1sxXSwgeiA9IGF4aXNbMl0sXHJcbiAgICAgICAgbGVuID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeiksXHJcbiAgICAgICAgcywgYywgdCxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMyxcclxuICAgICAgICBiMDAsIGIwMSwgYjAyLFxyXG4gICAgICAgIGIxMCwgYjExLCBiMTIsXHJcbiAgICAgICAgYjIwLCBiMjEsIGIyMjtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMobGVuKSA8IEdMTUFUX0VQU0lMT04pIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgeCAqPSBsZW47XHJcbiAgICB5ICo9IGxlbjtcclxuICAgIHogKj0gbGVuO1xyXG5cclxuICAgIHMgPSBNYXRoLnNpbihyYWQpO1xyXG4gICAgYyA9IE1hdGguY29zKHJhZCk7XHJcbiAgICB0ID0gMSAtIGM7XHJcblxyXG4gICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgIGExMCA9IGFbNF07IGExMSA9IGFbNV07IGExMiA9IGFbNl07IGExMyA9IGFbN107XHJcbiAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XHJcbiAgICBiMDAgPSB4ICogeCAqIHQgKyBjOyBiMDEgPSB5ICogeCAqIHQgKyB6ICogczsgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICBiMTAgPSB4ICogeSAqIHQgLSB6ICogczsgYjExID0geSAqIHkgKiB0ICsgYzsgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XHJcbiAgICBiMjAgPSB4ICogeiAqIHQgKyB5ICogczsgYjIxID0geSAqIHogKiB0IC0geCAqIHM7IGIyMiA9IHogKiB6ICogdCArIGM7XHJcblxyXG4gICAgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcclxuICAgIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcclxuICAgIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcclxuICAgIG91dFszXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcclxuICAgIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcclxuICAgIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcclxuICAgIG91dFs2XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcclxuICAgIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcclxuICAgIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcclxuICAgIG91dFs5XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcclxuICAgIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XHJcbiAgICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbMF0gID0gYVswXTtcclxuICAgICAgICBvdXRbMV0gID0gYVsxXTtcclxuICAgICAgICBvdXRbMl0gID0gYVsyXTtcclxuICAgICAgICBvdXRbM10gID0gYVszXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzRdID0gYTEwICogYyArIGEyMCAqIHM7XHJcbiAgICBvdXRbNV0gPSBhMTEgKiBjICsgYTIxICogcztcclxuICAgIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xyXG4gICAgb3V0WzddID0gYTEzICogYyArIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcclxuICAgIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xyXG4gICAgb3V0WzEwXSA9IGEyMiAqIGMgLSBhMTIgKiBzO1xyXG4gICAgb3V0WzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMjAgPSBhWzhdLFxyXG4gICAgICAgIGEyMSA9IGFbOV0sXHJcbiAgICAgICAgYTIyID0gYVsxMF0sXHJcbiAgICAgICAgYTIzID0gYVsxMV07XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXHJcbiAgICAgICAgb3V0WzRdICA9IGFbNF07XHJcbiAgICAgICAgb3V0WzVdICA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdICA9IGFbNl07XHJcbiAgICAgICAgb3V0WzddICA9IGFbN107XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xyXG4gICAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcclxuICAgIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xyXG4gICAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XHJcbiAgICBvdXRbOV0gPSBhMDEgKiBzICsgYTIxICogYztcclxuICAgIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcclxuICAgIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGEwMCA9IGFbMF0sXHJcbiAgICAgICAgYTAxID0gYVsxXSxcclxuICAgICAgICBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSxcclxuICAgICAgICBhMTEgPSBhWzVdLFxyXG4gICAgICAgIGExMiA9IGFbNl0sXHJcbiAgICAgICAgYTEzID0gYVs3XTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XHJcbiAgICAgICAgb3V0WzhdICA9IGFbOF07XHJcbiAgICAgICAgb3V0WzldICA9IGFbOV07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjICsgYTExICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjIC0gYTAwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjIC0gYTAzICogcztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICB2YXIgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbiAob3V0LCBxLCB2KSB7XHJcbiAgICAvLyBRdWF0ZXJuaW9uIG1hdGhcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeHkgPSB4ICogeTIsXHJcbiAgICAgICAgeHogPSB4ICogejIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgeXogPSB5ICogejIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcclxuICAgIG91dFsxXSA9IHh5ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB4eiAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHh5IC0gd3o7XHJcbiAgICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xyXG4gICAgb3V0WzZdID0geXogKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4eiArIHd5O1xyXG4gICAgb3V0WzldID0geXogLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0gKHh4ICsgeXkpO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gdlswXTtcclxuICAgIG91dFsxM10gPSB2WzFdO1xyXG4gICAgb3V0WzE0XSA9IHZbMl07XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubWF0NC5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzJdID0genggLSB3eTtcclxuICAgIG91dFszXSA9IDA7XHJcblxyXG4gICAgb3V0WzRdID0geXggLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSB4eCAtIHp6O1xyXG4gICAgb3V0WzZdID0genkgKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcblxyXG4gICAgb3V0WzhdID0genggKyB3eTtcclxuICAgIG91dFs5XSA9IHp5IC0gd3g7XHJcbiAgICBvdXRbMTBdID0gMSAtIHh4IC0geXk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGZydXN0dW0gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcnVzdHVtID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KSxcclxuICAgICAgICB0YiA9IDEgLyAodG9wIC0gYm90dG9tKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAobmVhciAqIDIpICogcmw7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gKG5lYXIgKiAyKSAqIHRiO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xyXG4gICAgb3V0WzldID0gKHRvcCArIGJvdHRvbSkgKiB0YjtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKGZhciAqIG5lYXIgKiAyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbiAob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXHJcbiAgICAgICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xyXG4gICAgb3V0WzBdID0gZiAvIGFzcGVjdDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSBmO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKDIgKiBmYXIgKiBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm9ydGhvID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBsciA9IDEgLyAobGVmdCAtIHJpZ2h0KSxcclxuICAgICAgICBidCA9IDEgLyAoYm90dG9tIC0gdG9wKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAtMiAqIGxyO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IC0yICogYnQ7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDIgKiBuZjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbHI7XHJcbiAgICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcclxuICAgIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lmxvb2tBdCA9IGZ1bmN0aW9uIChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbixcclxuICAgICAgICBleWV4ID0gZXllWzBdLFxyXG4gICAgICAgIGV5ZXkgPSBleWVbMV0sXHJcbiAgICAgICAgZXlleiA9IGV5ZVsyXSxcclxuICAgICAgICB1cHggPSB1cFswXSxcclxuICAgICAgICB1cHkgPSB1cFsxXSxcclxuICAgICAgICB1cHogPSB1cFsyXSxcclxuICAgICAgICBjZW50ZXJ4ID0gY2VudGVyWzBdLFxyXG4gICAgICAgIGNlbnRlcnkgPSBjZW50ZXJbMV0sXHJcbiAgICAgICAgY2VudGVyeiA9IGNlbnRlclsyXTtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXkgLSBjZW50ZXJ5KSA8IEdMTUFUX0VQU0lMT04gJiZcclxuICAgICAgICBNYXRoLmFicyhleWV6IC0gY2VudGVyeikgPCBHTE1BVF9FUFNJTE9OKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuaWRlbnRpdHkob3V0KTtcclxuICAgIH1cclxuXHJcbiAgICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xyXG4gICAgejEgPSBleWV5IC0gY2VudGVyeTtcclxuICAgIHoyID0gZXlleiAtIGNlbnRlcno7XHJcblxyXG4gICAgbGVuID0gMSAvIE1hdGguc3FydCh6MCAqIHowICsgejEgKiB6MSArIHoyICogejIpO1xyXG4gICAgejAgKj0gbGVuO1xyXG4gICAgejEgKj0gbGVuO1xyXG4gICAgejIgKj0gbGVuO1xyXG5cclxuICAgIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcclxuICAgIHgxID0gdXB6ICogejAgLSB1cHggKiB6MjtcclxuICAgIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcclxuICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xyXG4gICAgaWYgKCFsZW4pIHtcclxuICAgICAgICB4MCA9IDA7XHJcbiAgICAgICAgeDEgPSAwO1xyXG4gICAgICAgIHgyID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcclxuICAgICAgICB4MCAqPSBsZW47XHJcbiAgICAgICAgeDEgKj0gbGVuO1xyXG4gICAgICAgIHgyICo9IGxlbjtcclxuICAgIH1cclxuXHJcbiAgICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xyXG4gICAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcclxuICAgIHkyID0gejAgKiB4MSAtIHoxICogeDA7XHJcblxyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHkwICogeTAgKyB5MSAqIHkxICsgeTIgKiB5Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHkwID0gMDtcclxuICAgICAgICB5MSA9IDA7XHJcbiAgICAgICAgeTIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHkwICo9IGxlbjtcclxuICAgICAgICB5MSAqPSBsZW47XHJcbiAgICAgICAgeTIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dFswXSA9IHgwO1xyXG4gICAgb3V0WzFdID0geTA7XHJcbiAgICBvdXRbMl0gPSB6MDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSB4MTtcclxuICAgIG91dFs1XSA9IHkxO1xyXG4gICAgb3V0WzZdID0gejE7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0geDI7XHJcbiAgICBvdXRbOV0gPSB5MjtcclxuICAgIG91dFsxMF0gPSB6MjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IC0oeDAgKiBleWV4ICsgeDEgKiBleWV5ICsgeDIgKiBleWV6KTtcclxuICAgIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XHJcbiAgICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSArIE1hdGgucG93KGFbOV0sIDIpICsgTWF0aC5wb3coYVsxMF0sIDIpICsgTWF0aC5wb3coYVsxMV0sIDIpICsgTWF0aC5wb3coYVsxMl0sIDIpICsgTWF0aC5wb3coYVsxM10sIDIpICsgTWF0aC5wb3coYVsxNF0sIDIpICsgTWF0aC5wb3coYVsxNV0sIDIpICkpXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXQ0OyIsIi8vIFRPRE8gUmVzb3VyY2VzIGxpa2Ugc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSByZWZlcmVuY2UgbWFuYWdlbWVudFxyXG4vLyBUcmFjZSBhbmQgZmluZCBvdXQgd2hpY2ggc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSBjYW4gYmUgZGVzdHJveWVkXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdMSW5mbyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgUHJvZ3JhbU1hbmFnZXIgZnJvbSAnLi9ncHUvUHJvZ3JhbU1hbmFnZXInO1xyXG5cclxuLy8gTGlnaHQgaGVhZGVyXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHByZXpFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgbWF0NENyZWF0ZSA9IG1hdDQuY3JlYXRlO1xyXG5cclxudmFyIGVycm9yU2hhZGVyID0ge307XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0TWF0ZXJpYWwocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdEdldFVuaWZvcm0ocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF0udmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGVkLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElmUmVuZGVyKHJlbmRlcmFibGUpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wKCkge31cclxuXHJcbnZhciBhdHRyaWJ1dGVCdWZmZXJUeXBlTWFwID0ge1xyXG4gICAgZmxvYXQ6IGdsZW51bS5GTE9BVCxcclxuICAgIGJ5dGU6IGdsZW51bS5CWVRFLFxyXG4gICAgdWJ5dGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgc2hvcnQ6IGdsZW51bS5TSE9SVCxcclxuICAgIHVzaG9ydDogZ2xlbnVtLlVOU0lHTkVEX1NIT1JUXHJcbn07XHJcblxyXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChhdmFpbGFibGVBdHRyaWJ1dGVzLCBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCBpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZXMgPSBhdmFpbGFibGVBdHRyaWJ1dGVzO1xyXG4gICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scztcclxuICAgIHRoaXMuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgdGhpcy52YW8gPSBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQbGFjZUhvbGRlclRleHR1cmUocmVuZGVyZXIpIHtcclxuICAgIHZhciBibGFua0NhbnZhcztcclxuICAgIHZhciB3ZWJnbFRleHR1cmU7XHJcbiAgICB0aGlzLmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBpZiAoIWJsYW5rQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRW52aXJvbm1lbnQgbm90IHN1cHBvcnQgY3JlYXRlQ2FudmFzLlxyXG4gICAgICAgICAgICBibGFua0NhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgICAgICAgICAgYmxhbmtDYW52YXMud2lkdGggPSBibGFua0NhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGZpcnN0QmluZCA9ICF3ZWJnbFRleHR1cmU7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB3ZWJnbFRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJsYW5rQ2FudmFzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy51bmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKi9cclxuICAgICAgICBjYW52YXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3dpZHRoOiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2hlaWdodDogMTAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZXZpY2UgcGl4ZWwgcmF0aW8sIHNldCBieSBzZXREZXZpY2VQaXhlbFJhdGlvIG1ldGhvZFxyXG4gICAgICAgICAqIFNwZWNpYWxseSBmb3IgaGlnaCBkZWZpbmF0aW9uIGRpc3BsYXlcclxuICAgICAgICAgKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB8fCAxLjAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENsZWFyIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLjAsIDAuMCwgMC4wLCAwLjBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZhdWx0OlxyXG4gICAgICAgICAqICAgICBfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUIHwgX2dsLlNURU5DSUxfQlVGRkVSX0JJVFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJCaXQ6IDE3NjY0LFxyXG5cclxuICAgICAgICAvLyBTZXR0aW5ncyB3aGVuIGdldHRpbmcgY29udGV4dFxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LyMyLjRcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGFscGhhLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZGVwdGggYnVmZmVyLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aDogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgc3RlbmNpbCBidWZmZXIsIGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGVuY2lsOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYW50aWFsaWFzLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbnRpYWxpYXM6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIHByZW11bHRpcGxpZWQgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBwcmVzZXJ2ZSBkcmF3aW5nIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhyb3cgY29udGV4dCBlcnJvciwgdXN1YWxseSB0dXJuZWQgb24gaW4gZGVidWcgbW9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRocm93RXJyb3I6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2ViR0wgQ29udGV4dCBjcmVhdGVkIGZyb20gZ2l2ZW4gY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnbDogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZW5kZXJlciB2aWV3cG9ydCwgcmVhZC1vbmx5LCBjYW4gYmUgc2V0IGJ5IHNldFZpZXdwb3J0IG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld3BvcnQ6IHt9LFxyXG5cclxuICAgICAgICAvLyBTZXQgYnkgRnJhbWVCdWZmZXIjYmluZFxyXG4gICAgICAgIF9fY3VycmVudEZyYW1lQnVmZmVyOiBudWxsLFxyXG5cclxuICAgICAgICBfdmlld3BvcnRTdGFjazogW10sXHJcbiAgICAgICAgX2NsZWFyU3RhY2s6IFtdLFxyXG5cclxuICAgICAgICBfc2NlbmVSZW5kZXJpbmc6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSB2ZW5kb3IuY3JlYXRlQ2FudmFzKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBvcHRzID0ge1xyXG4gICAgICAgICAgICBhbHBoYTogdGhpcy5hbHBoYSxcclxuICAgICAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsXHJcbiAgICAgICAgICAgIHN0ZW5jaWw6IHRoaXMuc3RlbmNpbCxcclxuICAgICAgICAgICAgYW50aWFsaWFzOiB0aGlzLmFudGlhbGlhcyxcclxuICAgICAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSxcclxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRzKVxyXG4gICAgICAgICAgICB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0cyk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dsaW5mbyA9IG5ldyBHTEluZm8odGhpcy5nbCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdsLnRhcmdldFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FscmVhZHkgY3JlYXRlZCBhIHJlbmRlcmVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyAnRXJyb3IgY3JlYXRpbmcgV2ViR0wgQ29udGV4dCAnICsgZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0IG1hbmFnZXJzXHJcbiAgICB0aGlzLl9wcm9ncmFtTWdyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZSA9IG5ldyBQbGFjZUhvbGRlclRleHR1cmUodGhpcyk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5SZW5kZXJlci5wcm90b3R5cGUuICoqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgY2FudmFzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAvLyBzZXQgdGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGUgY2FudmFzLlxyXG4gICAgICAgIHZhciBkcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGNhbnZhcy5zdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogZHByO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogZHByO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSBjYW52YXMud2lkdGggLyBkcHI7XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KDAsIDAsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciB3aWR0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVuZGVyZXIgaGVpZ2h0XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHZpZXdwb3J0IGFzcGVjdCxcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Vmlld3BvcnRBc3BlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHJldHVybiB2aWV3cG9ydC53aWR0aCAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgc2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24oZGV2aWNlUGl4ZWxSYXRpbykge1xyXG4gICAgICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdGhpcy5yZXNpemUodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKi9cclxuICAgIGdldERldmljZVBpeGVsUmF0aW86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBleHRlbnNpb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdldEdMRXh0ZW5zaW9uOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0RXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHsqfVxyXG4gICAgICovXHJcbiAgICBnZXRHTFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldFBhcmFtZXRlcihuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyaW5nIHZpZXdwb3J0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICAgICAqICAgICAgICBEZWZhdWx0bHkgdXNlIHRoZSByZW5kZXJlcmUgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogICAgICAgIEl0IG5lZWRzIHRvIGJlIDEgd2hlbiBzZXRWaWV3cG9ydCBpcyBjYWxsZWQgYnkgZnJhbWVCdWZmZXJcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIHNldFZpZXdwb3J0KDAsMCx3aWR0aCxoZWlnaHQsMSlcclxuICAgICAqICBzZXRWaWV3cG9ydCh7XHJcbiAgICAgKiAgICAgIHg6IDAsXHJcbiAgICAgKiAgICAgIHk6IDAsXHJcbiAgICAgKiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAqICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgKiAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB4O1xyXG5cclxuICAgICAgICAgICAgeCA9IG9iai54O1xyXG4gICAgICAgICAgICB5ID0gb2JqLnk7XHJcbiAgICAgICAgICAgIHdpZHRoID0gb2JqLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBvYmouaGVpZ2h0O1xyXG4gICAgICAgICAgICBkcHIgPSBvYmouZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB9XHJcbiAgICAgICAgZHByID0gZHByIHx8IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuXHJcbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydChcclxuICAgICAgICAgICAgeCAqIGRwciwgeSAqIGRwciwgd2lkdGggKiBkcHIsIGhlaWdodCAqIGRwclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVXNlIGEgZnJlc2ggbmV3IG9iamVjdCwgbm90IHdyaXRlIHByb3BlcnR5LlxyXG4gICAgICAgIHRoaXMudmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgIHg6IHgsXHJcbiAgICAgICAgICAgIHk6IHksXHJcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwclxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IHZpZXdwb3J0IGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlVmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl92aWV3cG9ydFN0YWNrLnB1c2godGhpcy52aWV3cG9ydCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIHZpZXdwb3J0IGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydFN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCh0aGlzLl92aWV3cG9ydFN0YWNrLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IGNsZWFyIGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlQ2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhclN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICBjbGVhckJpdDogdGhpcy5jbGVhckJpdCxcclxuICAgICAgICAgICAgY2xlYXJDb2xvcjogdGhpcy5jbGVhckNvbG9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIGNsZWFyIGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGVhclN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG9wdCA9IHRoaXMuX2NsZWFyU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG9wdC5jbGVhckNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQml0ID0gb3B0LmNsZWFyQml0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZFNjZW5lUmVuZGVyaW5nOiBmdW5jdGlvbiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbmRlciB0aGUgc2NlbmUgaW4gY2FtZXJhIHRvIHRoZSBzY3JlZW4gb3IgYmluZGVkIG9mZmxpbmUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9ICAgICAgIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gICAgICBjYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbbm90VXBkYXRlU2NlbmVdIElmIG5vdCBjYWxsIHRoZSBzY2VuZS51cGRhdGUgbWV0aG9kcyBpbiB0aGUgcmVuZGVyaW5nLCBkZWZhdWx0IHRydWVcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbcHJlWl0gICAgICAgICAgIElmIHVzZSBwcmVaIG9wdGltaXphdGlvbiwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICogQHJldHVybiB7SVJlbmRlckluZm99XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSwgbm90VXBkYXRlU2NlbmUsIHByZVopIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSB0aGlzLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQml0KSB7XHJcblxyXG4gICAgICAgICAgICAvLyBNdXN0IHNldCBkZXB0aCBhbmQgY29sb3IgbWFzayB0cnVlIGJlZm9yZSBjbGVhclxyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgICAgICB2YXIgbmVlZHNTY2lzc29yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydERwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydC53aWR0aCAhPT0gdGhpcy5fd2lkdGggfHwgdmlld3BvcnQuaGVpZ2h0ICE9PSB0aGlzLl9oZWlnaHRcclxuICAgICAgICAgICAgICAgIHx8ICh2aWV3cG9ydERwciAmJiB2aWV3cG9ydERwciAhPT0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvKVxyXG4gICAgICAgICAgICAgICAgfHwgdmlld3BvcnQueCB8fCB2aWV3cG9ydC55XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbmVlZHNTY2lzc29yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE1NDQ2MDgvaG93LXRvLWNsZWFyLWEtcmVjdGFuZ2xlLWFyZWEtaW4td2ViZ2xcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIHZpZXdwb3J0XHJcbiAgICAgICAgICAgICAgICBfZ2wuZW5hYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnNjaXNzb3Iodmlld3BvcnQueCAqIHZpZXdwb3J0RHByLCB2aWV3cG9ydC55ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LndpZHRoICogdmlld3BvcnREcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZpZXdwb3J0RHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKHRoaXMuY2xlYXJCaXQpO1xyXG4gICAgICAgICAgICBpZiAobmVlZHNTY2lzc29yKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHNjZW5lIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSBwcmVwYXNzIGxpa2Ugc2hhZG93IG1hcFxyXG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGl0IGFnYWluXHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuXHJcbiAgICAgICAgY2FtZXJhID0gY2FtZXJhIHx8IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICBpZiAoIWNhbWVyYSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5cXCd0IGZpbmQgY2FtZXJhIGluIHRoZSBzY2VuZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWwgPSBzY2VuZS5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBwcmUgelxyXG4gICAgICAgIGlmIChwcmVaKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUHJlWihvcGFxdWVMaXN0LCBzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVRVUFMKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aEZ1bmMoX2dsLkxFU1MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBkZXB0aCBvZiB0cmFuc3BhcmVudCBsaXN0LlxyXG4gICAgICAgIHZhciB3b3JsZFZpZXdNYXQgPSBtYXQ0Q3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvc1ZpZXdTcGFjZSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc3BhcmVudExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSB0cmFuc3BhcmVudExpc3RbaV07XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUod29ybGRWaWV3TWF0LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NChwb3NWaWV3U3BhY2UsIHJlbmRlcmFibGUucG9zaXRpb24uYXJyYXksIHdvcmxkVmlld01hdCk7XHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19kZXB0aCA9IHBvc1ZpZXdTcGFjZVsyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBvcGFxdWUgbGlzdFxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhvcGFxdWVMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclBhc3ModHJhbnNwYXJlbnRMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy50cmFuc3BhcmVudFNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjZW5lLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFudXBcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpIHtcclxuICAgICAgICByZW5kZXJNYXRlcmlhbCA9IHJlbmRlck1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyYW1NZ3IuZ2V0UHJvZ3JhbShyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZVByb2dyYW06IGZ1bmN0aW9uIChwcm9ncmFtKSB7XHJcbiAgICAgICAgaWYgKHByb2dyYW0uX19lcnJvcikge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBwcm9ncmFtLl9fZXJyb3I7XHJcbiAgICAgICAgICAgIGlmIChlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXJyb3JTaGFkZXJbcHJvZ3JhbS5fX3VpZF9fXSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50aHJvd0Vycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycm9yTXNnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVQcm9ncmFtczogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdmFyIGdldE1hdGVyaWFsID0gKHBhc3NDb25maWcgJiYgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCkgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHNjZW5lID0gc2NlbmUgfHwgbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyTWF0ZXJpYWwgPSBnZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZSA9IGxpc3RbaSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZKb2ludHNMZW4gPSBwcmV2UmVuZGVyYWJsZS5qb2ludHMgPyBwcmV2UmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludHNMZW4gPSByZW5kZXJhYmxlLmpvaW50cyA/IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgICAgICAvLyBLZWVwIHByb2dyYW0gbm90IGNoYW5nZSBpZiBqb2ludHMsIG1hdGVyaWFsLCBsaWdodEdyb3VwIGFyZSBzYW1lIG9mIHR3byByZW5kZXJhYmxlcy5cclxuICAgICAgICAgICAgICAgIGlmIChqb2ludHNMZW4gPT09IHByZXZKb2ludHNMZW5cclxuICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsID09PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubGlnaHRHcm91cCA9PT0gcHJldlJlbmRlcmFibGUubGlnaHRHcm91cFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcmV2UmVuZGVyYWJsZS5fX3Byb2dyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgc2luZ2xlIHJlbmRlcmFibGUgbGlzdCBpbiBjYW1lcmEgaW4gc2VxdWVuY2VcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJhYmxlW119IGxpc3QgTGlzdCBvZiBhbGwgcmVuZGVyYWJsZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBbY2FtZXJhXSBDYW1lcmEgcHJvdmlkZSB2aWV3IG1hdHJpeCBhbmQgcG9yamVjdGlvbiBtYXRyaXguIEl0IGNhbiBiZSBudWxsLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwYXNzQ29uZmlnXVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0TWF0ZXJpYWxdIEdldCByZW5kZXJhYmxlIG1hdGVyaWFsLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0VW5pZm9ybV0gR2V0IG1hdGVyaWFsIHVuaWZvcm0gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZF0gSWYgbWF0ZXJpYWwgY2hhbmdlZC5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmJlZm9yZVJlbmRlcl0gQmVmb3JlIHJlbmRlciBlYWNoIHJlbmRlcmFibGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5hZnRlclJlbmRlcl0gQWZ0ZXIgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuaWZSZW5kZXJdIElmIHJlbmRlciB0aGUgcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLnNvcnRDb21wYXJlXSBTb3J0IGNvbXBhcmUgZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyUGFzczogZnVuY3Rpb24obGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgcGFzc0NvbmZpZyA9IHBhc3NDb25maWcgfHwge307XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCA9IHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybSA9IHBhc3NDb25maWcuZ2V0VW5pZm9ybSB8fCBkZWZhdWx0R2V0VW5pZm9ybTtcclxuICAgICAgICAvLyBQRU5ESU5HIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkID0gcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZCB8fCBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQ7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5iZWZvcmVSZW5kZXIgPSBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciB8fCBub29wO1xyXG4gICAgICAgIHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgPSBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyIHx8IG5vb3A7XHJcblxyXG4gICAgICAgIHZhciBpZlJlbmRlck9iamVjdCA9IHBhc3NDb25maWcuaWZSZW5kZXIgfHwgZGVmYXVsdElmUmVuZGVyO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2dyYW1zKGxpc3QsIHRoaXMuX3NjZW5lUmVuZGVyaW5nLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICBpZiAocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSkge1xyXG4gICAgICAgICAgICBsaXN0LnNvcnQocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTb21lIGNvbW1vbiBidWlsdGluIHVuaWZvcm1zXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydDtcclxuICAgICAgICB2YXIgdkRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0VW5pZm9ybSA9IFtcclxuICAgICAgICAgICAgdmlld3BvcnQueCAqIHZEcHIsIHZpZXdwb3J0LnkgKiB2RHByLFxyXG4gICAgICAgICAgICB2aWV3cG9ydC53aWR0aCAqIHZEcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZEcHJcclxuICAgICAgICBdO1xyXG4gICAgICAgIHZhciB3aW5kb3dEcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHdpbmRvd1NpemVVbmlmb3JtID0gdGhpcy5fX2N1cnJlbnRGcmFtZUJ1ZmZlclxyXG4gICAgICAgICAgICA/IFt0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVXaWR0aCgpLCB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVIZWlnaHQoKV1cclxuICAgICAgICAgICAgOiBbdGhpcy5fd2lkdGggKiB3aW5kb3dEcHIsIHRoaXMuX2hlaWdodCAqIHdpbmRvd0Rwcl07XHJcbiAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgIHZhciB2aWV3cG9ydFNpemVVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydFVuaWZvcm1bMl0sIHZpZXdwb3J0VW5pZm9ybVszXVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdmlldyBhbmQgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5QUk9KRUNUSU9OLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXSU5WRVJTRSwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFVyk7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFV0lOVkVSU0UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5QUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5QUk9KRUNUSU9OSU5WRVJTRSwgbWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTik7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lUmVuZGVyaW5nO1xyXG5cclxuICAgICAgICB2YXIgcHJldk1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBwcmV2UHJvZ3JhbTtcclxuICAgICAgICB2YXIgcHJldlJlbmRlcmFibGU7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHZhciBkZXB0aFRlc3QsIGRlcHRoTWFzaztcclxuICAgICAgICB2YXIgY3VsbGluZywgY3VsbEZhY2UsIGZyb250RmFjZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIGRyYXdJRDtcclxuICAgICAgICB2YXIgY3VycmVudFZBTztcclxuICAgICAgICB2YXIgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICAvLyB2YXIgdmFvRXh0ID0gdGhpcy5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAvLyBub3QgdXNlIHZhb0V4dCwgc29tZSBwbGF0Zm9ybXMgbWF5IG1lc3MgaXQgdXAuXHJcbiAgICAgICAgdmFyIHZhb0V4dCA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpc1NjZW5lTm9kZSA9IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0gIT0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHdvcmxkTTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaWZSZW5kZXJPYmplY3QocmVuZGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCB0cmFuc2Zvcm1lZCB0byBqb2ludCBzcGFjZS4gSWdub3JlIHRoZSBtZXNoIHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHdvcmxkTSA9IChyZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBtYXRyaWNlcy5JREVOVElUWSA6IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgdmFyIHNoYWRlciA9IG1hdGVyaWFsLnNoYWRlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RHJhd0lEID0gZ2VvbWV0cnkuX191aWRfXyArICctJyArIHByb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgdmFyIGRyYXdJRENoYW5nZWQgPSBjdXJyZW50RHJhd0lEICE9PSBkcmF3SUQ7XHJcbiAgICAgICAgICAgIGRyYXdJRCA9IGN1cnJlbnREcmF3SUQ7XHJcbiAgICAgICAgICAgIGlmIChkcmF3SURDaGFuZ2VkICYmIHZhb0V4dCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBTZWVtcyBuZWVkIHRvIGJlIGJvdW5kIHRvIG51bGwgaW1tZWRpYXRlbHkgKG9yIGJlZm9yZSBiaW5kIGFub3RoZXIgcHJvZ3JhbT8pIGlmIHZhbyBpcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLldPUkxELCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTiwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUobWF0cmljZXMuV09STERWSUVXLCBtYXRyaWNlcy5WSUVXLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRElOVkVSU0UsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXSU5WRVJTRSwgbWF0cmljZXMuV09STERWSUVXKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyICYmIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyKHRoaXMpO1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW1DaGFuZ2VkID0gcHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyBudW1iZXJcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVCcsIHZpZXdwb3J0VW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1dJTkRPV19TSVpFJywgd2luZG93U2l6ZVVuaWZvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnTkVBUicsIGNhbWVyYS5uZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0ZBUicsIGNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdERVZJQ0VQSVhFTFJBVElPJywgdkRwcik7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1RJTUUnLCB0aW1lKTtcclxuICAgICAgICAgICAgICAgIC8vIERFUFJFQ0FURURcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlRfU0laRScsIHZpZXdwb3J0U2l6ZVVuaWZvcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCBsaWdodHMgdW5pZm9ybXNcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgb3B0aW1pemVkXHJcbiAgICAgICAgICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZS5zZXRMaWdodFVuaWZvcm1zKHByb2dyYW0sIHJlbmRlcmFibGUubGlnaHRHcm91cCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtID0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByb2dyYW0gY2hhbmdlcyBhbHNvIG5lZWRzIHJlc2V0IHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCB8fCBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWxcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoVGVzdCAhPT0gZGVwdGhUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID8gX2dsLmVuYWJsZShfZ2wuREVQVEhfVEVTVCkgOiBfZ2wuZGlzYWJsZShfZ2wuREVQVEhfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0ID0gbWF0ZXJpYWwuZGVwdGhUZXN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoTWFzayAhPT0gZGVwdGhNYXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRlcHRoTWFzayhtYXRlcmlhbC5kZXB0aE1hc2spO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzayA9IG1hdGVyaWFsLmRlcHRoTWFzaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCAhPT0gdHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA/IF9nbC5lbmFibGUoX2dsLkJMRU5EKSA6IF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2FjaGUgYmxlbmRpbmdcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5ibGVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5ibGVuZChfZ2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBibGVuZCBmdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKF9nbC5GVU5DX0FERCwgX2dsLkZVTkNfQUREKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJsZW5kRnVuY1NlcGFyYXRlKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBfZ2wuT05FLCBfZ2wuT05FX01JTlVTX1NSQ19BTFBIQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsVGFrZXNUZXh0dXJlU2xvdCA9IHRoaXMuX2JpbmRNYXRlcmlhbChcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJvZ3JhbSxcclxuICAgICAgICAgICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSB8fCBudWxsLCBwcmV2TWF0ZXJpYWwgfHwgbnVsbCwgcHJldlByb2dyYW0gfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYXNzQ29uZmlnLmdldFVuaWZvcm1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeFNlbWFudGljS2V5cyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY0tleXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWF0cml4U2VtYW50aWNLZXlzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gbWF0cml4U2VtYW50aWNLZXlzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIubWF0cml4U2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbWF0cmljZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpY0luZm8uaXNUcmFuc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeE5vVHJhbnNwb3NlID0gbWF0cmljZXNbc2VtYW50aWNJbmZvLnNlbWFudGljTm9UcmFuc3Bvc2VdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShtYXRyaXgsIG1hdHJpeE5vVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmN1bGxGYWNlICE9PSBjdWxsRmFjZSkge1xyXG4gICAgICAgICAgICAgICAgY3VsbEZhY2UgPSByZW5kZXJhYmxlLmN1bGxGYWNlO1xyXG4gICAgICAgICAgICAgICAgX2dsLmN1bGxGYWNlKGN1bGxGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5mcm9udEZhY2UgIT09IGZyb250RmFjZSkge1xyXG4gICAgICAgICAgICAgICAgZnJvbnRGYWNlID0gcmVuZGVyYWJsZS5mcm9udEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJvbnRGYWNlKGZyb250RmFjZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbGluZyAhPT0gY3VsbGluZykge1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA9IHJlbmRlcmFibGUuY3VsbGluZztcclxuICAgICAgICAgICAgICAgIGN1bGxpbmcgPyBfZ2wuZW5hYmxlKF9nbC5DVUxMX0ZBQ0UpIDogX2dsLmRpc2FibGUoX2dsLkNVTExfRkFDRSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgdXBkYXRlIHNrZWxldG9uIGluIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2tlbGV0b24ocmVuZGVyYWJsZSwgcHJvZ3JhbSwgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90KTtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRWQU8gPSB0aGlzLl9iaW5kVkFPKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyT2JqZWN0KHJlbmRlcmFibGUsIGN1cnJlbnRWQU8pO1xyXG5cclxuICAgICAgICAgICAgLy8gQWZ0ZXIgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlcih0aGlzLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5hZnRlclJlbmRlciAmJiByZW5kZXJhYmxlLmFmdGVyUmVuZGVyKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgcHJldlByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSBpZiB2YW8gaXMgY2hhbmdlZD9cclxuICAgICAgICBpZiAodmFvRXh0KSB7XHJcbiAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVycGFzcycsIHRoaXMsIGxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1heEpvaW50TnVtYmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRNYXhKb2ludE51bWJlcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlU2tlbGV0b246IGZ1bmN0aW9uIChvYmplY3QsIHByb2dyYW0sIHNsb3QpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBvYmplY3Quc2tlbGV0b247XHJcbiAgICAgICAgLy8gU2V0IHBvc2UgbWF0cmljZXMgb2Ygc2tpbm5lZCBtZXNoXHJcbiAgICAgICAgaWYgKHNrZWxldG9uKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gVXBkYXRlIGJlZm9yZSBjdWxsaW5nLlxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGUoKTtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5qb2ludHMubGVuZ3RoID4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShvYmplY3QuX191aWRfXywgb2JqZWN0LmpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnVzZVRleHR1cmVTbG90KHRoaXMsIHNraW5NYXRyaWNlc1RleHR1cmUsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgJ3NraW5NYXRyaWNlc1RleHR1cmUnLCBzbG90KTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxZicsICdza2luTWF0cmljZXNUZXh0dXJlU2l6ZScsIHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc0FycmF5ID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnU0tJTl9NQVRSSVgnLCBza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJPYmplY3Q6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICB2YXIgZ2xEcmF3TW9kZSA9IHJlbmRlcmFibGUubW9kZTtcclxuICAgICAgICBpZiAoZ2xEcmF3TW9kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGdsRHJhd01vZGUgPSAweDAwMDQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiAoZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVTIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX1NUUklQIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX0xPT1ApIHtcclxuICAgICAgICAvLyAgICAgX2dsLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBpZiAodmFvLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgdmFyIHVpbnRFeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfZWxlbWVudF9pbmRleF91aW50Jyk7XHJcbiAgICAgICAgICAgIHZhciB1c2VVaW50RXh0ID0gdWludEV4dCAmJiAoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KTtcclxuICAgICAgICAgICAgdmFyIGluZGljZXNUeXBlID0gdXNlVWludEV4dCA/IF9nbC5VTlNJR05FRF9JTlQgOiBfZ2wuVU5TSUdORURfU0hPUlQ7XHJcblxyXG4gICAgICAgICAgICBfZ2wuZHJhd0VsZW1lbnRzKGdsRHJhd01vZGUsIHZhby5pbmRpY2VzQnVmZmVyLmNvdW50LCBpbmRpY2VzVHlwZSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBVc2UgdmVydGV4IG51bWJlciBpbiBidWZmZXJcclxuICAgICAgICAgICAgLy8gdmVydGV4Q291bnQgbWF5IGdldCB0aGUgd3JvbmcgdmFsdWUgd2hlbiBnZW9tZXRyeSBmb3JnZXQgdG8gbWFyayBkaXJ0eSBhZnRlciB1cGRhdGVcclxuICAgICAgICAgICAgX2dsLmRyYXdBcnJheXMoZ2xEcmF3TW9kZSwgMCwgZ2VvbWV0cnkudmVydGV4Q291bnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLCBwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBwcmV2UHJvZ3JhbSwgZ2V0VW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgLy8gUEVORElORyBTYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFsIHRha2UgZGlmZmVyZW50IHNsb3Q/XHJcblxyXG4gICAgICAgIC8vIE1heSB1c2Ugc2hhZGVyIG9mIG90aGVyIG1hdGVyaWFsIGlmIHNoYWRlciBjb2RlIGFyZSBzYW1lXHJcbiAgICAgICAgdmFyIHNhbWVQcm9ncmFtID0gcHJldlByb2dyYW0gPT09IHByb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50VGV4dHVyZVNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIHZhciBlbmFibGVkVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyVGV4dHVyZSA9IHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS50eXBlO1xyXG4gICAgICAgICAgICAvLyBOb3QgdXNlIGBpbnN0YW5jZW9mYCB0byBkZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB0ZXh0dXJlIGluIE1hdGVyaWFsI2JpbmQuXHJcbiAgICAgICAgICAgIC8vIFVzZSB0eXBlIGluc3RlYWQsIGluIHNvbWUgY2FzZSB0ZXh0dXJlIG1heSBiZSBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcy5cclxuICAgICAgICAgICAgLy8gVE9ETyBEdWNrIHR5cGUgdmFsaWRhdGUuXHJcbiAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgc2xvdFxyXG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWVbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlW2ldLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGxhY2Vob2xkZXJUZXh0dXJlLl9fc2xvdCA9IC0xO1xyXG5cclxuICAgICAgICAvLyBTZXQgdW5pZm9ybXNcclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGVuYWJsZWRVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybSA9IG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVmFsdWUgPSBnZXRVbmlmb3JtVmFsdWUocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm0udHlwZTtcclxuICAgICAgICAgICAgdmFyIGlzVGV4dHVyZSA9IHVuaWZvcm1UeXBlID09PSAndCc7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXVuaWZvcm1WYWx1ZSB8fCAhdW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgLy8gV2hlbiBiaW5kaW5nIHR3byBtYXRlcmlhbHMgd2l0aCB0aGUgc2FtZSBzaGFkZXJcclxuICAgICAgICAgICAgLy8gTWFueSB1bmlmb3JtcyB3aWxsIGJlIGJlIHNldCB0d2ljZSBldmVuIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZVxyXG4gICAgICAgICAgICAvLyBTbyBhZGQgYSBldmFsdWF0aW9uIHRvIHNlZSBpZiB0aGUgdW5pZm9ybSBpcyByZWFsbHkgbmVlZGVkIHRvIGJlIHNldFxyXG4gICAgICAgICAgICBpZiAocHJldk1hdGVyaWFsICYmIHNhbWVQcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldlVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldlVuaWZvcm1WYWx1ZSB8fCAhcHJldlVuaWZvcm1WYWx1ZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2VW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlVuaWZvcm1WYWx1ZSA9PT0gdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGlsbCB0YWtlIHRoZSBzbG90IHRvIG1ha2Ugc3VyZSBzYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFscyBoYXZlIHNhbWUgc2xvdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2JyAmJiB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gcHJvZ3JhbS5jdXJyZW50VGV4dHVyZVNsb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCBzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7IC8vIFRleHR1cmUgdW5pZm9ybSBpcyBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSB1bmlmb3JtIHVzZSBzYW1lIHRleHR1cmUuLlxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCB1bmlmb3JtVmFsdWUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm1WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIEFycmF5XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uaGFzVW5pZm9ybShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdW5pZm9ybVZhbHVlW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9fc2xvdCA9IHNsb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0ZXh0dXJlLl9fc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxaXYnLCBzeW1ib2wsIGFycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgdW5pZm9ybS50eXBlLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld1Nsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIC8vIFRleHR1cmUgc2xvdCBtYXliZSB1c2VkIG91dCBvZiBtYXRlcmlhbC5cclxuICAgICAgICBwcm9ncmFtLnJlc2V0VGV4dHVyZVNsb3QoY3VycmVudFRleHR1cmVTbG90KTtcclxuICAgICAgICByZXR1cm4gbmV3U2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRWQU86IGZ1bmN0aW9uICh2YW9FeHQsIHNoYWRlciwgZ2VvbWV0cnksIHByb2dyYW0pIHtcclxuICAgICAgICB2YXIgaXNTdGF0aWMgPSAhZ2VvbWV0cnkuZHluYW1pYztcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIHZhb0lkID0gdGhpcy5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciB2YW8gPSBnZW9tZXRyeS5fX3Zhb0NhY2hlW3Zhb0lkXTtcclxuICAgICAgICBpZiAoIXZhbykge1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtzID0gZ2VvbWV0cnkuZ2V0QnVmZmVyQ2h1bmtzKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoIWNodW5rcyB8fCAhY2h1bmtzLmxlbmd0aCkgeyAgLy8gRW1wdHkgbWVzaFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlcnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXR0cmlidXRlQnVmZmVyc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlQnVmZmVySW5mby5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gYXR0cmlidXRlQnVmZmVySW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gc2VtYW50aWNJbmZvICYmIHNlbWFudGljSW5mby5zeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBwcm9ncmFtLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGVCdWZmZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFvID0gbmV3IFZlcnRleEFycmF5T2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdID0gdmFvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmVlZHNCaW5kQXR0cmlidXRlcyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSB2ZXJ0ZXggb2JqZWN0IGFycmF5IGNvc3QgYSBsb3RcclxuICAgICAgICAvLyBTbyB3ZSBkb24ndCB1c2UgaXQgb24gdGhlIGR5bmFtaWMgb2JqZWN0XHJcbiAgICAgICAgaWYgKHZhb0V4dCAmJiBpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAvLyBVc2UgdmVydGV4IGFycmF5IG9iamVjdFxyXG4gICAgICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8xMC9vZXN2ZXJ0ZXhhcnJheW9iamVjdC1leHRlbnNpb24uaHRtbFxyXG4gICAgICAgICAgICBpZiAodmFvLnZhbyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YW8udmFvID0gdmFvRXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8udmFvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gdmFvLmF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSB2YW8uaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IHByb2dyYW0uZW5hYmxlQXR0cmlidXRlcyh0aGlzLCB2YW8uYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scywgKHZhb0V4dCAmJiBpc1N0YXRpYyAmJiB2YW8pKTtcclxuICAgICAgICAgICAgLy8gU2V0dGluZyBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF2YWlsYWJsZUF0dHJpYnV0ZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTGlzdFthXTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXZhaWxhYmxlQXR0cmlidXRlc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlQnVmZmVySW5mby5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdsVHlwZSA9IGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXBbYXR0cmlidXRlQnVmZmVySW5mby50eXBlXSB8fCBfZ2wuRkxPQVQ7XHJcblxyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxvY2F0aW9uLCBzaXplLCBnbFR5cGUsIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbztcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUHJlWjogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgcHJlWlBhc3NNYXRlcmlhbCA9IHRoaXMuX3ByZXpNYXRlcmlhbCB8fCBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9wcmV6TWF0ZXJpYWwgPSBwcmVaUGFzc01hdGVyaWFsO1xyXG5cclxuICAgICAgICBfZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG5cclxuICAgICAgICAvLyBTdGF0dXNcclxuICAgICAgICB0aGlzLnJlbmRlclBhc3MobGlzdCwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLmlnbm9yZVByZVo7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRBID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRCID0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0QS5nZXQoJ2RpZmZ1c2VNYXAnKSAhPT0gbWF0Qi5nZXQoJ2RpZmZ1c2VNYXAnKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRBLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKSAhPT0gKG1hdEIuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmVaUGFzc01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0OiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHNjZW5lLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VTY2VuZTogZnVuY3Rpb24oc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2VOb2RlKHNjZW5lLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBzY2VuZS5kaXNwb3NlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBub2RlLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpZXMsIHRleHR1cmVzIGFuZCBzaGFkZXJzIGF0dGFjaGVkIG9uIGl0IG9yIGl0cyBkZXNjZW5kYW50XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZUdlb21ldHJ5PWZhbHNlXSBJZiBkaXNwb3NlIHRoZSBnZW9tZXRyaWVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZVRleHR1cmU9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIHRleHR1cmVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlTm9kZTogZnVuY3Rpb24ocm9vdCwgZGlzcG9zZUdlb21ldHJ5LCBkaXNwb3NlVGV4dHVyZSkge1xyXG4gICAgICAgIC8vIERldHRhY2hlZCBmcm9tIHBhcmVudFxyXG4gICAgICAgIGlmIChyb290LmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgIHJvb3QuZ2V0UGFyZW50KCkucmVtb3ZlKHJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlzcG9zZWRNYXAgPSB7fTtcclxuICAgICAgICByb290LnRyYXZlcnNlKGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbm9kZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgaWYgKG5vZGUuZ2VvbWV0cnkgJiYgZGlzcG9zZUdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmdlb21ldHJ5LmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2VUZXh0dXJlICYmIG1hdGVyaWFsICYmICFkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmVVbmlmb3JtcyA9IG1hdGVyaWFsLmdldFRleHR1cmVVbmlmb3JtcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybU5hbWUgPSB0ZXh0dXJlVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmRpc3Bvc2UgJiYgdmFsLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsW2tdLmRpc3Bvc2UgJiYgdmFsW2tdLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUGFydGljbGUgc3lzdGVtIGFuZCBBbWJpZW50Q3ViZW1hcCBsaWdodCBuZWVkIHRvIGRpc3Bvc2VcclxuICAgICAgICAgICAgaWYgKG5vZGUuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlR2VvbWV0cnk6IGZ1bmN0aW9uKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VUZXh0dXJlOiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gZnJhbWUgYnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuRnJhbWVCdWZmZXJ9IGZyYW1lQnVmZmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VGcmFtZUJ1ZmZlcjogZnVuY3Rpb24oZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IHNjcmVlbiBjb29yZHMgdG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMoTkRDKVxyXG4gICAgICogU2NyZWVuIGNvb3JkcyBjYW4gZ2V0IGZyb20gbW91c2UgZXZlbnQsIGl0IGlzIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gY2FudmFzIGVsZW1lbnRcclxuICAgICAqIE5EQyBjYW4gYmUgdXNlZCBpbiByYXkgY2FzdGluZyB3aXRoIENhbWVyYS5wcm90b3R5cGUuY2FzdFJheSBtZXRob2RzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgc2NyZWVuVG9OREM6IGZ1bmN0aW9uKHgsIHksIG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEludmVydCB5O1xyXG4gICAgICAgIHkgPSB0aGlzLl9oZWlnaHQgLSB5O1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciBhcnIgPSBvdXQuYXJyYXk7XHJcbiAgICAgICAgYXJyWzBdID0gKHggLSB2aWV3cG9ydC54KSAvIHZpZXdwb3J0LndpZHRoO1xyXG4gICAgICAgIGFyclswXSA9IGFyclswXSAqIDIgLSAxO1xyXG4gICAgICAgIGFyclsxXSA9ICh5IC0gdmlld3BvcnQueSkgLyB2aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICAgICAgYXJyWzFdID0gYXJyWzFdICogMiAtIDE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIE9wYXF1ZSByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geFxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IHlcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUub3BhcXVlU29ydENvbXBhcmUgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAvLyBQcmlvcml0eSByZW5kZXJPcmRlciAtPiBwcm9ncmFtIC0+IG1hdGVyaWFsIC0+IGdlb21ldHJ5XHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgaWYgKHgubWF0ZXJpYWwgPT09IHkubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHgubWF0ZXJpYWwuX191aWRfXyAtIHkubWF0ZXJpYWwuX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtICYmIHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwYXJlbnQgcmVuZGVyYWJsZXMgY29tcGFyZSBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGFcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSBiXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqIEBzdGF0aWNcclxuICovXHJcblJlbmRlcmVyLnRyYW5zcGFyZW50U29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IGRlcHRoIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuXHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fZGVwdGggPT09IHkuX19kZXB0aCkge1xyXG4gICAgICAgICAgICBpZiAoeC5fX3Byb2dyYW0gPT09IHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSAgJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRGVwdGggaXMgbmVnYXRpdmVcclxuICAgICAgICAvLyBTbyBmYXJ0aGVyIG9iamVjdCBoYXMgc21hbGxlciBkZXB0aCB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB4Ll9fZGVwdGggLSB5Ll9fZGVwdGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vLyBUZW1wb3JhcnkgdmFyaWFibGVzXHJcbnZhciBtYXRyaWNlcyA9IHtcclxuICAgIElERU5USVRZOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STEQ6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVc6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRElOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxEVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRElOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpXHJcbn07XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUID0gZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVQgPSBnbGVudW0uU1RFTkNJTF9CVUZGRVJfQklUO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyZXI7XHJcbiIsImltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3IzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqL1xyXG52YXIgVmVjdG9yMyA9IGZ1bmN0aW9uKHgsIHksIHopIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjMsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHksIHogd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHogY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMy5mcm9tVmFsdWVzKHgsIHksIHopO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnksIHRoaXMueik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3Jvc3MgcHJvZHVjdCBvZiBzZWxmIGFuZCBiLCB3cml0dGVuIHRvIGEgVmVjdG9yMyBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2aWRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEb3QgcHJvZHVjdCBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZG90OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWMzLmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2ZWMzLm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHogY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbiAoc2NhbGUpIHtcclxuICAgICAgICB2ZWMzLnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAocykge1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbiAoYiwgcykge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkTGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MyBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybU1hdDModGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24gKHEpIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNuZm9ybSBzZWxmIGludG8gcHJvamVjdGlvbiBzcGFjZSB3aXRoIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBhcHBseVByb2plY3Rpb246IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgIG0gPSBtLmFycmF5O1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgaWYgKG1bMTVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2WzJdO1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKiB3O1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKiB3O1xyXG4gICAgICAgICAgICB2WzJdID0gKG1bMTBdICogdlsyXSArIG1bMTRdKSAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKyBtWzEyXTtcclxuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICsgbVsxM107XHJcbiAgICAgICAgICAgIHZbMl0gPSBtWzEwXSAqIHZbMl0gKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgZXVsZXJGcm9tUXVhdDogZnVuY3Rpb24ocSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbVF1YXQodGhpcywgcSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21NYXQzOiBmdW5jdGlvbiAobSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbU1hdDModGhpcywgbSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yMy5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIHZlYzMuc2V0KG91dC5hcnJheSwgeCwgeSwgeik7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWMzLmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdmlkZSA9IFZlY3RvcjMuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzMubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMy5sZW5ndGggPSBWZWN0b3IzLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMzLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubXVsdGlwbHkgPSBWZWN0b3IzLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMy5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IzLnNxckRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjMuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc3VidHJhY3QgPSBWZWN0b3IzLnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7TWF0cml4M30gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0MyhvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybVF1YXQob3V0LmFycmF5LCBhLmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wKHZhbCwgbWluLCBtYXgpIHtcclxuICAgIHJldHVybiB2YWwgPCBtaW4gPyBtaW4gOiAodmFsID4gbWF4ID8gbWF4IDogdmFsKTtcclxufVxyXG52YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xyXG52YXIgYXNpbiA9IE1hdGguYXNpbjtcclxudmFyIGFicyA9IE1hdGguYWJzO1xyXG4vKipcclxuICogQ29udmVydCBxdWF0ZXJuaW9uIHRvIGV1bGVyIGFuZ2xlXHJcbiAqIFF1YXRlcm5pb24gbXVzdCBiZSBub3JtYWxpemVkXHJcbiAqIEZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEsIG9yZGVyKSB7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHEgPSBxLmFycmF5O1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM107XHJcbiAgICB2YXIgeDIgPSB4ICogeDtcclxuICAgIHZhciB5MiA9IHkgKiB5O1xyXG4gICAgdmFyIHoyID0geiAqIHo7XHJcbiAgICB2YXIgdzIgPSB3ICogdztcclxuXHJcbiAgICB2YXIgb3JkZXIgPSAob3JkZXIgfHwgJ1hZWicpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgLSB5ICogeiksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHogKyB5ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcCgyICogKHggKiB3IC0geSAqIHopLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgKyB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHkgKiB3IC0geiAqIHgpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh6ICogdyAtIHggKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB6ICogeSksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeSAqIHcgLSB4ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHggKiB5ICsgeiAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHogKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB4ICogeiksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHkgKyB6ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3ICsgeSAqIHopLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh6ICogdyAtIHggKiB5KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIG9yZGVyOiAnICsgb3JkZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHJvdGF0aW9uIG1hdHJpeCB0byBldWxlciBhbmdsZVxyXG4gKiBmcm9tIHRocmVlLmpzXHJcbiAqL1xyXG5WZWN0b3IzLmV1bGVyRnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtLCBvcmRlcikge1xyXG4gICAgLy8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcclxuICAgIHZhciB0ZSA9IG0uYXJyYXk7XHJcbiAgICB2YXIgbTExID0gdGVbMF0sIG0xMiA9IHRlWzNdLCBtMTMgPSB0ZVs2XTtcclxuICAgIHZhciBtMjEgPSB0ZVsxXSwgbTIyID0gdGVbNF0sIG0yMyA9IHRlWzddO1xyXG4gICAgdmFyIG0zMSA9IHRlWzJdLCBtMzIgPSB0ZVs1XSwgbTMzID0gdGVbOF07XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcChtMTMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTEzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKC1jbGFtcChtMjMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTIzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKG0xMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAobTMyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigtbTMxLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbigtY2xhbXAobTMxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKG0yMSwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjEpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTIyKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oLWNsYW1wKG0xMiwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTIpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVmVjdG9yMywge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1g6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoLTEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWToge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAtMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9aOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAwLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFVQOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFpFUk86IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjM7XHJcbiIsImltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFF1YXRlcm5pb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuICAgIHcgPSB3ID09PSB1bmRlZmluZWQgPyAxIDogdztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgUXVhdGVybmlvbiwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb24jXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBxdWF0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuUXVhdGVybmlvbi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFF1YXRlcm5pb24sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHcgY29tcG9uZW50IGZyb20geCwgeSwgeiBjb21wb25lbnRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlVzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuY2FsY3VsYXRlVyh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gYXJyWzNdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgUXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBzZWxmIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsXHJcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIGludmVydCBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29uanVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jb25qdWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDM6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDR4NCByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIFRoZSA0dGggY29sdW1uIGFuZCA0dGggcm93IHdpbGwgYmUgZHJvcGVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgbWF0My5mcm9tTWF0NChtMywgbS5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gaWRlbnRpdHkgcXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHF1YXQubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IGEgYW5kIHNlbGZcclxuICAgICAqIFF1YXRlcm5pb24gbXV0aXBseSBpcyBub3QgY29tbXV0YXRpdmUsIHNvIHRoZSByZXN1bHQgb2YgbXV0aXBseUxlZnQgaXMgZGlmZmVyZW50IHdpdGggbXVsdGlwbHkuXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXhpc1xyXG4gICAgICogQHBhcmFtIHJhZFxyXG4gICAgICovXHJcbiAgICByb3RhdGVBeGlzOmZ1bmN0aW9uIChheGlzLHJhZCkge1xyXG5cclxuICAgICAgICB2YXIgcXVhdDIgPSBuZXcgUXVhdGVybmlvbigpLmFycmF5O1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZUF4aXModGhpcy5hcnJheSxxdWF0MixheGlzLHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFggYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWCh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWTogZnVuY3Rpb24gKHJhZCkge1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZVkodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uIChyYWQpIHtcclxuICAgICAgICBxdWF0LnJvdGF0ZVoodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBWZWN0b3IzIGEgdG8gVmVjdG9yMyBiLlxyXG4gICAgICogYSBhbmQgYiBuZWVkcyB0byBiZSBub3JtYWxpemVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGlvblRvOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHF1YXQucm90YXRpb25Ubyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gYXhlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZpZXdcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSByaWdodFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldEF4ZXM6IGZ1bmN0aW9uICh2aWV3LCByaWdodCwgdXApIHtcclxuICAgICAgICBxdWF0LnNldEF4ZXModGhpcy5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHdpdGggYSByb3RhdGlvbiBheGlzIGFuZCByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhpc0FuZ2xlOiBmdW5jdGlvbiAoYXhpcywgcmFkKSB7XHJcbiAgICAgICAgcXVhdC5zZXRBeGlzQW5nbGUodGhpcy5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2xlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5zbGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZXVsZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICAgICAqL1xyXG4gICAgZnJvbUV1bGVyOiBmdW5jdGlvbiAodiwgb3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gUXVhdGVybmlvbi5mcm9tRXVsZXIodGhpcywgdiwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbi8vIEdldHRlciBhbmQgU2V0dGVyXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFF1YXRlcm5pb24ucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzBdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsxXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzJdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB3XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbM107XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzNdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmFkZCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHpcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgd1xyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldCA9IGZ1bmN0aW9uIChvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHF1YXQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jb3B5ID0gZnVuY3Rpb24gKG91dCwgYikge1xyXG4gICAgcXVhdC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY2FsY3VsYXRlVyhvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY29uanVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pZGVudGl0eSA9IGZ1bmN0aW9uIChvdXQpIHtcclxuICAgIHF1YXQuaWRlbnRpdHkob3V0LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0LmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgcmV0dXJuIHF1YXQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5sZW5ndGgoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBRdWF0ZXJuaW9uLmxlbmd0aCA9IFF1YXRlcm5pb24ubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICBxdWF0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zbGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQuc2xlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsdGlwbHkgPSBRdWF0ZXJuaW9uLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGF4aXNcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24gKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQuYXJyYXksIGF4aXMuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubm9ybWFsaXplID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXJMZW4gPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIHF1YXQuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXVhcmVkTGVuZ3RoID0gUXVhdGVybmlvbi5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBtXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uZnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtKSB7XHJcbiAgICBxdWF0LmZyb21NYXQzKG91dC5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2aWV3XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgcmlnaHRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB1cFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldEF4ZXMgPSBmdW5jdGlvbiAob3V0LCB2aWV3LCByaWdodCwgdXApIHtcclxuICAgIHF1YXQuc2V0QXhlcyhvdXQuYXJyYXksIHZpZXcuYXJyYXksIHJpZ2h0LmFycmF5LCB1cC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnJvdGF0aW9uVG8gPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0LnJvdGF0aW9uVG8ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgcXVhdGVybmlvbiBmcm9tIGV1bGVyXHJcbiAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHBhcmFtIHtTdHJpbmd9IG9yZGVyXHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmZyb21FdWxlciA9IGZ1bmN0aW9uIChvdXQsIHYsIG9yZGVyKSB7XHJcblxyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgdiA9IHYuYXJyYXk7XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG4gICAgdmFyIGMxID0gTWF0aC5jb3ModlswXSAvIDIpO1xyXG4gICAgdmFyIGMyID0gTWF0aC5jb3ModlsxXSAvIDIpO1xyXG4gICAgdmFyIGMzID0gTWF0aC5jb3ModlsyXSAvIDIpO1xyXG4gICAgdmFyIHMxID0gTWF0aC5zaW4odlswXSAvIDIpO1xyXG4gICAgdmFyIHMyID0gTWF0aC5zaW4odlsxXSAvIDIpO1xyXG4gICAgdmFyIHMzID0gTWF0aC5zaW4odlsyXSAvIDIpO1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXHJcbiAgICAvLyAgMjA2OTYtZnVuY3Rpb24tdG8tY29udmVydC1iZXR3ZWVuLWRjbS1ldWxlci1hbmdsZXMtcXVhdGVybmlvbnMtYW5kLWV1bGVyLXZlY3RvcnMvXHJcbiAgICAvLyAgY29udGVudC9TcGluQ2FsYy5tXHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUXVhdGVybmlvbjtcclxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDRcclxuICovXHJcbnZhciBNYXRyaXg0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fYXhpc1ggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1kgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1ogPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXg0XHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXg0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQ0LmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB1cHBlciAzeDMgcGFydCBmcm9tIHF1YXRlcm5pb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIG1hdDQuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOiBmdW5jdGlvbihxLCB2KSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gTWF0cml4MmQsIGl0IGlzIHVzZWQgd2hlbiBjb252ZXJ0aW5nIGEgMmQgc2hhcGUgdG8gM2Qgc3BhY2UuXHJcbiAgICAgKiBJbiAzZCBzcGFjZSBpdCBpcyBlcXVpdmFsZW50IHRvIHJhbnNsYXRlIG9uIHh5IHBsYW5lIGFuZCByb3RhdGUgYWJvdXQgeiBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtMmRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbihtMmQpIHtcclxuICAgICAgICBNYXRyaXg0LmZyb21NYXQyZCh0aGlzLCBtMmQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGZydXN0dW0gYm91bmRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LmZydXN0dW0odGhpcy5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBleWVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogZnVuY3Rpb24oZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICAgICAgbWF0NC5sb29rQXQodGhpcy5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5TGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdHRvbVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB0b3BcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgb3J0aG86IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5vcnRobyh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZm92eVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBhc3BlY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcGVyc3BlY3RpdmU6IGZ1bmN0aW9uKGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZSh0aGlzLmFycmF5LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IHJhZCBhYm91dCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkLCBheGlzKSB7XHJcbiAgICAgICAgbWF0NC5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWSBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVaOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVoodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHNjYWxlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHYuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHRyYW5zbGF0ZSBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIGEgbWF0cml4IHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtzY2FsZV1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSByb3RhdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3Rvcn0gcG9zaXRpb25cclxuICAgICAqIEBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21pY3Jvc29mdC54bmEuZnJhbWV3b3JrLm1hdHJpeC5kZWNvbXBvc2UuYXNweFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VNYXRyaXg6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHggPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBtMyA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzY2FsZSwgcm90YXRpb24sIHBvc2l0aW9uKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh4LCBlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeSwgZWxbNF0sIGVsWzVdLCBlbFs2XSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHosIGVsWzhdLCBlbFs5XSwgZWxbMTBdKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzeCA9IHZlYzMubGVuZ3RoKHgpO1xyXG4gICAgICAgICAgICB2YXIgc3kgPSB2ZWMzLmxlbmd0aCh5KTtcclxuICAgICAgICAgICAgdmFyIHN6ID0gdmVjMy5sZW5ndGgoeik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxyXG4gICAgICAgICAgICB2YXIgZGV0ID0gdGhpcy5kZXRlcm1pbmFudCgpO1xyXG4gICAgICAgICAgICBpZiAoZGV0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgc3ggPSAtc3g7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgc2NhbGUuc2V0KHN4LCBzeSwgc3opO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zZXQoZWxbMTJdLCBlbFsxM10sIGVsWzE0XSk7XHJcblxyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBlbCk7XHJcbiAgICAgICAgICAgIC8vIE5vdCBsaWtlIG1hdDQsIG1hdDMgaW4gZ2xtYXRyaXggc2VlbXMgdG8gYmUgcm93LWJhc2VkXHJcbiAgICAgICAgICAgIC8vIFNlZW1zIGZpeGVkIGluIGdsLW1hdHJpeCAyLjIuMlxyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgvaXNzdWVzLzExNFxyXG4gICAgICAgICAgICAvLyBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG5cclxuICAgICAgICAgICAgbTNbMF0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzFdIC89IHN4O1xyXG4gICAgICAgICAgICBtM1syXSAvPSBzeDtcclxuXHJcbiAgICAgICAgICAgIG0zWzNdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s0XSAvPSBzeTtcclxuICAgICAgICAgICAgbTNbNV0gLz0gc3k7XHJcblxyXG4gICAgICAgICAgICBtM1s2XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbN10gLz0gc3o7XHJcbiAgICAgICAgICAgIG0zWzhdIC89IHN6O1xyXG5cclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myhyb3RhdGlvbi5hcnJheSwgbTMpO1xyXG4gICAgICAgICAgICBxdWF0Lm5vcm1hbGl6ZShyb3RhdGlvbi5hcnJheSwgcm90YXRpb24uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgdmFyIHByb3RvID0gTWF0cml4NC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIFogQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWi5zZXQoZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1o7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gSGVyZSBoYXMgYSBwcm9ibGVtXHJcbiAgICAgICAgICAgIC8vIElmIG9ubHkgc2V0IGFuIGl0ZW0gb2YgdmVjdG9yIHdpbGwgbm90IHdvcmtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzhdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbOV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsxMF0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWSBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNZLnNldChlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNZO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbNF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs1XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzZdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFggQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWC5zZXQoZWxbMF0sIGVsWzFdLCBlbFsyXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzBdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbMV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsyXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXg0LmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0NC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGxlZnRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmlnaHRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYm90dG9tXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRvcFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm9ydGhvID0gZnVuY3Rpb24ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5vcnRobyhvdXQuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmb3Z5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGFzcGVjdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnBlcnNwZWN0aXZlID0gZnVuY3Rpb24ob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5wZXJzcGVjdGl2ZShvdXQuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubG9va0F0ID0gZnVuY3Rpb24ob3V0LCBleWUsIGNlbnRlciwgdXApIHtcclxuICAgIG1hdDQubG9va0F0KG91dC5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0NC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bHRpcGx5ID0gTWF0cml4NC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVF1YXQgPSBmdW5jdGlvbihvdXQsIHEpIHtcclxuICAgIG1hdDQuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbihvdXQsIHEsIHYpIHtcclxuICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG00XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmZyb21NYXQyZCA9IGZ1bmN0aW9uKG00LCBtMmQpIHtcclxuICAgIG00Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICB2YXIgbTJkID0gbTJkLmFycmF5O1xyXG4gICAgdmFyIG00ID0gbTQuYXJyYXk7XHJcblxyXG4gICAgbTRbMF0gPSBtMmRbMF07XHJcbiAgICBtNFs0XSA9IG0yZFsyXTtcclxuICAgIG00WzEyXSA9IG0yZFs0XTtcclxuXHJcbiAgICBtNFsxXSA9IG0yZFsxXTtcclxuICAgIG00WzVdID0gbTJkWzNdO1xyXG4gICAgbTRbMTNdID0gbTJkWzVdO1xyXG5cclxuICAgIHJldHVybiBtNDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCwgYXhpcy5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWihvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQ0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQ0LnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxuXHJcbi8qKlxyXG4gKiBBeGlzIGFsaWduZWQgYm91bmRpbmcgYm94XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5Cb3VuZGluZ0JveFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21pbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFttYXhdXHJcbiAqL1xyXG52YXIgQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAobWluLCBtYXgpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5taW4gPSBtaW4gfHwgbmV3IFZlY3RvcjMoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubWF4ID0gbWF4IHx8IG5ldyBWZWN0b3IzKC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG5cclxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xyXG59O1xyXG5cclxuQm91bmRpbmdCb3gucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBCb3VuZGluZ0JveCxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG1pbiBhbmQgbWF4IGNvb3JkcyBmcm9tIGEgdmVydGljZXMgYXJyYXlcclxuICAgICAqIEBwYXJhbSAge2FycmF5fSB2ZXJ0aWNlc1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVGcm9tVmVydGljZXM6IGZ1bmN0aW9uICh2ZXJ0aWNlcykge1xyXG4gICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB2ZXJ0aWNlc1swXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdIDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA8IG1pbkFyclsxXSkgeyBtaW5BcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gdmVydGV4WzJdOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFswXSA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB2ZXJ0ZXhbMF07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMV0gPiBtYXhBcnJbMV0pIHsgbWF4QXJyWzFdID0gdmVydGV4WzFdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzJdID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHZlcnRleFsyXTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5pb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgdW5pb246IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heDtcclxuICAgICAgICB2ZWMzLm1pbihtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMubWF4KG1heC5hcnJheSwgbWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIG9wZXJhdGlvbiB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdGlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWF4KG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5taW4obWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBpbnRlcnNlY3Qgd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuICEgKF9taW5bMF0gPiBfbWF4MlswXSB8fCBfbWluWzFdID4gX21heDJbMV0gfHwgX21pblsyXSA+IF9tYXgyWzJdXHJcbiAgICAgICAgICAgIHx8IF9tYXhbMF0gPCBfbWluMlswXSB8fCBfbWF4WzFdIDwgX21pbjJbMV0gfHwgX21heFsyXSA8IF9taW4yWzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIGFub3RoZXIgYm91bmRpbmcgYm94IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluQm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcblxyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIF9taW4yID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXgyID0gYmJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9taW4yWzBdICYmIF9taW5bMV0gPD0gX21pbjJbMV0gJiYgX21pblsyXSA8PSBfbWluMlsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9tYXgyWzBdICYmIF9tYXhbMV0gPj0gX21heDJbMV0gJiYgX21heFsyXSA+PSBfbWF4MlsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIHBvaW50IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX3AgPSBwLmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gX21pblswXSA8PSBfcFswXSAmJiBfbWluWzFdIDw9IF9wWzFdICYmIF9taW5bMl0gPD0gX3BbMl1cclxuICAgICAgICAgICAgJiYgX21heFswXSA+PSBfcFswXSAmJiBfbWF4WzFdID49IF9wWzFdICYmIF9tYXhbMl0gPj0gX3BbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYm91bmRpbmcgYm94IGlzIGZpbml0ZVxyXG4gICAgICovXHJcbiAgICBpc0Zpbml0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICByZXR1cm4gaXNGaW5pdGUoX21pblswXSkgJiYgaXNGaW5pdGUoX21pblsxXSkgJiYgaXNGaW5pdGUoX21pblsyXSlcclxuICAgICAgICAgICAgJiYgaXNGaW5pdGUoX21heFswXSkgJiYgaXNGaW5pdGUoX21heFsxXSkgJiYgaXNGaW5pdGUoX21heFsyXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybUZyb20odGhpcywgbWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveCBhbmQgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXguXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1Gcm9tOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIGh0dHA6Ly9kZXYudGhlb21hZGVyLmNvbS90cmFuc2Zvcm0tYm91bmRpbmctYm94ZXMvXHJcbiAgICAgICAgdmFyIHhhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeGIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHliID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgemEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHNvdXJjZS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBzb3VyY2UubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB4YVswXSA9IG1bMF0gKiBtaW5bMF07IHhhWzFdID0gbVsxXSAqIG1pblswXTsgeGFbMl0gPSBtWzJdICogbWluWzBdO1xyXG4gICAgICAgICAgICB4YlswXSA9IG1bMF0gKiBtYXhbMF07IHhiWzFdID0gbVsxXSAqIG1heFswXTsgeGJbMl0gPSBtWzJdICogbWF4WzBdO1xyXG5cclxuICAgICAgICAgICAgeWFbMF0gPSBtWzRdICogbWluWzFdOyB5YVsxXSA9IG1bNV0gKiBtaW5bMV07IHlhWzJdID0gbVs2XSAqIG1pblsxXTtcclxuICAgICAgICAgICAgeWJbMF0gPSBtWzRdICogbWF4WzFdOyB5YlsxXSA9IG1bNV0gKiBtYXhbMV07IHliWzJdID0gbVs2XSAqIG1heFsxXTtcclxuXHJcbiAgICAgICAgICAgIHphWzBdID0gbVs4XSAqIG1pblsyXTsgemFbMV0gPSBtWzldICogbWluWzJdOyB6YVsyXSA9IG1bMTBdICogbWluWzJdO1xyXG4gICAgICAgICAgICB6YlswXSA9IG1bOF0gKiBtYXhbMl07IHpiWzFdID0gbVs5XSAqIG1heFsyXTsgemJbMl0gPSBtWzEwXSAqIG1heFsyXTtcclxuXHJcbiAgICAgICAgICAgIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgICAgICBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAgICAgbWluWzBdID0gTWF0aC5taW4oeGFbMF0sIHhiWzBdKSArIE1hdGgubWluKHlhWzBdLCB5YlswXSkgKyBNYXRoLm1pbih6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1pblsxXSA9IE1hdGgubWluKHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1pbih5YVsxXSwgeWJbMV0pICsgTWF0aC5taW4oemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSBNYXRoLm1pbih4YVsyXSwgeGJbMl0pICsgTWF0aC5taW4oeWFbMl0sIHliWzJdKSArIE1hdGgubWluKHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIG1heFswXSA9IE1hdGgubWF4KHhhWzBdLCB4YlswXSkgKyBNYXRoLm1heCh5YVswXSwgeWJbMF0pICsgTWF0aC5tYXgoemFbMF0sIHpiWzBdKSArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBNYXRoLm1heCh4YVsxXSwgeGJbMV0pICsgTWF0aC5tYXgoeWFbMV0sIHliWzFdKSArIE1hdGgubWF4KHphWzFdLCB6YlsxXSkgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWF4WzJdID0gTWF0aC5tYXgoeGFbMl0sIHhiWzJdKSArIE1hdGgubWF4KHlhWzJdLCB5YlsyXSkgKyBNYXRoLm1heCh6YVsyXSwgemJbMl0pICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIHByb2plY3Rpb24gbWF0cml4IHRvIHRoZSBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBtID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIG1pbiBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MTAgPSBtaW5bMF07XHJcbiAgICAgICAgdmFyIHYxMSA9IG1pblsxXTtcclxuICAgICAgICB2YXIgdjEyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MjAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYyMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjIyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtYXggelxyXG4gICAgICAgIHZhciB2MzAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYzMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjMyID0gbWF4WzJdO1xyXG5cclxuICAgICAgICBpZiAobVsxNV0gPT09IDEpIHsgIC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBtWzEwXSAqIHYxMiArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYzMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjMxICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IG1bMTBdICogdjMyICsgbVsxNF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdyA9IC0xIC8gdjEyO1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBtWzBdICogdjEwICogdztcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSAqIHc7XHJcbiAgICAgICAgICAgIG1heFsyXSA9IChtWzEwXSAqIHYxMiArIG1bMTRdKSAqIHc7XHJcblxyXG4gICAgICAgICAgICB3ID0gLTEgLyB2MjI7XHJcbiAgICAgICAgICAgIG1heFswXSA9IG1bMF0gKiB2MjAgKiB3O1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjIxICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYzMjtcclxuICAgICAgICAgICAgbWluWzJdID0gKG1bMTBdICogdjMyICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5taW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmICghdmVydGljZXMpIHtcclxuICAgICAgICAgICAgLy8gQ3ViZSB2ZXJ0aWNlc1xyXG4gICAgICAgICAgICB2ZXJ0aWNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBFaWdodCBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAvLy0tLSBtaW4gelxyXG4gICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgbWluWzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBtYXhbMF0sIG1heFsxXSwgbWluWzJdKTtcclxuXHJcbiAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzNDb3B5KG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzNDb3B5KG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IGJvdW5kaW5nIGJveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICBib3VuZGluZ0JveC5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJvdW5kaW5nQm94O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFF1YXRlcm5pb24gZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxudmFyIG5hbWVJZCA9IDA7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE5vZGUgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTm9kZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIGFrYSB0cmFuc2xhdGlvbi5cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRpb24gcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlLiBSZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyByb290IHNjZW5lLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgd29ybGRUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuXHJcbiAgICAgKiBDb21wb3NpdGVkIHdpdGggcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBzY2FsZS5cclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvY2FsVHJhbnNmb3JtOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIGxvY2FsIHRyYW5zZm9ybSBpcyB1cGRhdGUgZnJvbSBTUlQoc2NhbGUsIHJvdGF0aW9uLCB0cmFuc2xhdGlvbiwgd2hpY2ggaXMgcG9zaXRpb24gaGVyZSkgZWFjaCBmcmFtZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcmVudCBvZiBjdXJyZW50IHNjZW5lIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5Ob2RlfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3BhcmVudDogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJvb3Qgc2NlbmUgbW91bnRlZC4gTnVsbCBpZiBpdCBpcyBhIGlzb2xhdGVkIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5TY2VuZX1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9zY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaW5JdGVyYXRpbmc6IGZhbHNlLFxyXG5cclxuICAgIC8vIERlcHRoIGZvciB0cmFuc3BhcmVudCBsaXN0IHNvcnRpbmdcclxuICAgIF9fZGVwdGg6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICh0aGlzLnR5cGUgfHwgJ05PREUnKSArICdfJyArIChuYW1lSWQrKyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucm90YXRpb24pIHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zY2FsZSkge1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcblxyXG59LFxyXG4vKipAbGVuZHMgY2xheS5Ob2RlLnByb3RvdHlwZS4gKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBub2RlIGFuZCBpdHMgY2hpbHJlbiBpbnZpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGludmlzaWJsZTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBOb2RlIGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYSByZW5kZXJhYmxlIHNjZW5lIG5vZGUsIGxpa2UgTWVzaCBhbmQgUGFydGljbGVTeXN0ZW1cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHNldE5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlUmVwb3NpdG9yeSA9IHNjZW5lLl9ub2RlUmVwb3NpdG9yeTtcclxuICAgICAgICAgICAgZGVsZXRlIG5vZGVSZXBvc2l0b3J5W3RoaXMubmFtZV07XHJcbiAgICAgICAgICAgIG5vZGVSZXBvc2l0b3J5W25hbWVdID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBjaGlsZCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsUGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFBhcmVudC5yZW1vdmUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChub2RlKTtcclxuXHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lICYmIHNjZW5lICE9PSBub2RlLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fYWRkU2VsZlRvU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXJrIGNoaWxkcmVuIG5lZWRzIHVwZGF0ZSB0cmFuc2Zvcm1cclxuICAgICAgICAvLyBJbiBjYXNlIGNoaWxkIGFyZSByZW1vdmUgYW5kIGFkZGVkIGFnYWluIGFmdGVyIHBhcmVudCBtb3ZlZFxyXG4gICAgICAgIG5vZGUuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2hpbGQgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpZHggPSBjaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICBub2RlLnRyYXZlcnNlKHRoaXMuX3JlbW92ZVNlbGZGcm9tU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWxsIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0uX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0udHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBzY2VuZSBtb3VudGVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBnZXRTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyZW50IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVTZWxmRnJvbVNjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lLnJlbW92ZUZyb21TY2VuZShkZXNjZW5kYW50KTtcclxuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRTZWxmVG9TY2VuZTogZnVuY3Rpb24gKGRlc2NlbmRhbnQpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZS5hZGRUb1NjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGlzQW5jZXN0b3I6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUuX3BhcmVudDtcclxuICAgICAgICB3aGlsZShwYXJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBuZXcgY3JlYXRlZCBhcnJheSBvZiBhbGwgY2hpbGRyZW4gbm9kZXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZVtdfVxyXG4gICAgICovXHJcbiAgICBjaGlsZHJlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5zbGljZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjaGlsZCBzY2VuZSBub2RlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjaGlsZEF0OiBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2lkeF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IGNoaWxkIHdpdGggdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgZGVzY2VuZGFudCBoYXZlIHRoZSBnaXZlbiBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBnZXREZXNjZW5kYW50QnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gY2hpbGQuZ2V0RGVzY2VuZGFudEJ5TmFtZShuYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IGRlc2NlbmRhbnQgbm9kZSBieSBwYXRoXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBub2RlLnF1ZXJ5Tm9kZSgncm9vdC9wYXJlbnQvY2hpbGQnKTtcclxuICAgICAqL1xyXG4gICAgcXVlcnlOb2RlOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmICghcGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gTmFtZSBoYXZlIHNsYXNoID9cclxuICAgICAgICB2YXIgcGF0aEFyciA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGF0aEFycltpXTtcclxuICAgICAgICAgICAgLy8gU2tpcCBlbXB0eVxyXG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjdXJyZW50Ll9jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bal07XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBxdWVyeSBwYXRoLCByZWxhdGl2ZSB0byByb290Tm9kZShkZWZhdWx0IGlzIHNjZW5lKVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtyb290Tm9kZV1cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0UGF0aDogZnVuY3Rpb24gKHJvb3ROb2RlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcvJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcGFyZW50O1xyXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5uYW1lO1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50Ll9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcGF0aCA9IGN1cnJlbnQubmFtZSArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Ll9wYXJlbnQgPT0gcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudC5fcGFyZW50ICYmIHJvb3ROb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXB0aCBmaXJzdCB0cmF2ZXJzZSBhbGwgaXRzIGRlc2NlbmRhbnQgc2NlbmUgbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRG9uJ3QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIHRyYXZlcnNlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIHRyYXZlcnNlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBfY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgX2NoaWxkcmVuW2ldLnRyYXZlcnNlKGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgYWxsIGNoaWxkcmVuIG5vZGVzLlxyXG4gICAgICpcclxuICAgICAqICoqV0FSTioqIERPTidUIGRvIGBhZGRgLCBgcmVtb3ZlYCBvcGVyYXRpb24gaW4gdGhlIGNhbGxiYWNrIGR1cmluZyBpdGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIGVhY2hDaGlsZDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBfY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgY2hpbGQsIGkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGxvY2FsIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIGxvY2FsIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChrZWVwU2NhbGUpIHtcclxuICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICB0aGlzLmxvY2FsVHJhbnNmb3JtLmRlY29tcG9zZU1hdHJpeChzY2FsZSwgdGhpcy5yb3RhdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB3b3JsZCB0cmFuc2Zvcm0gYW5kIGRlY29tcG9zZSB0byBTUlRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0V29ybGRUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSwgbWF0cml4LmFycmF5KTtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIHRoZSB3b3JsZCB0cmFuc2Zvcm0gdG8gU1JUXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlV29ybGRUcmFuc2Zvcm06IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0bXAgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICAvLyBBc3N1bWUgd29ybGQgdHJhbnNmb3JtIGlzIHVwZGF0ZWRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQodG1wLCB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsb2NhbFRyYW5zZm9ybS5hcnJheSwgdG1wLCB3b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobG9jYWxUcmFuc2Zvcm0uYXJyYXksIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0cmFuc2Zvcm1OZWVkc1VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnJvdGF0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnNjYWxlLl9kaXJ0eTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbG9jYWwgdHJhbnNmb3JtIGZyb20gU1JUXHJcbiAgICAgKiBOb3RpY2UgdGhhdCBsb2NhbCB0cmFuc2Zvcm0gd2lsbCBub3QgYmUgdXBkYXRlZCBpZiBfZGlydHkgbWFyayBvZiBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlIGlzIGFsbCBmYWxzZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcclxuICAgICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBvcmRlciwgc2NhbGUtPnJvdGF0aW9uLT5wb3NpdGlvblxyXG4gICAgICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG0sIHJvdGF0aW9uLmFycmF5LCBwb3NpdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIHNjYWxlLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHJvdGF0aW9uLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzY2FsZS5fZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHdvcmxkIHRyYW5zZm9ybSwgYXNzdW1lIGl0cyBwYXJlbnQgd29ybGQgdHJhbnNmb3JtIGhhdmUgYmVlbiB1cGRhdGVkXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShcclxuICAgICAgICAgICAgICAgIHdvcmxkVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtLmFycmF5LFxyXG4gICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weSh3b3JsZFRyYW5zZm9ybSwgbG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtIGJlZm9yZSB3aG9sZSBzY2VuZSBpcyB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZpbmQgdGhlIHJvb3Qgbm9kZSB3aGljaCB0cmFuc2Zvcm0gbmVlZHMgdXBkYXRlO1xyXG4gICAgICAgIHZhciByb290Tm9kZUlzRGlydHkgPSB0aGlzO1xyXG4gICAgICAgIHdoaWxlIChyb290Tm9kZUlzRGlydHkgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpXHJcbiAgICAgICAgICAgICYmIHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvb3ROb2RlSXNEaXJ0eSA9IHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdE5vZGVJc0RpcnR5LnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gYW5kIHdvcmxkIHRyYW5zZm9ybSByZWN1cnNpdmVseVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZVVwZGF0ZVdvcmxkXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlVXBkYXRlV29ybGQpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlTG9jYWxUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIGlzIG1hbnVhbGx5IHNldHRlZFxyXG4gICAgICAgICAgICBmb3JjZVVwZGF0ZVdvcmxkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZVdvcmxkIHx8IHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duKCk7XHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGUoZm9yY2VVcGRhdGVXb3JsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBib3VuZGluZyBib3ggb2Ygbm9kZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtmaWx0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgLy8gVE9ETyBTa2lubmluZ1xyXG4gICAgZ2V0Qm91bmRpbmdCb3g6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEZpbHRlciAoZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFlbC5pbnZpc2libGUgJiYgZWwuZ2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXBCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBpbnZXb3JsZFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBvdXQgfHwgbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlciB8fCBkZWZhdWx0RmlsdGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQoaW52V29ybGRUcmFuc2Zvcm0sIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmlkZW50aXR5KGludldvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShmdW5jdGlvbiAobWVzaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkgJiYgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guY29weShtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHRtcE1hdDQsIGludldvcmxkVHJhbnNmb3JtLCBtZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC51bmlvbih0bXBCQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcywgZGVmYXVsdEZpbHRlcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHdvcmxkIHBvc2l0aW9uLCBleHRyYWN0ZWQgZnJvbSB3b3JsZCB0cmFuc2Zvcm1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZ2V0V29ybGRQb3NpdGlvbjogZnVuY3Rpb24gKG91dCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICAgICAgYXJyWzBdID0gbVsxMl07XHJcbiAgICAgICAgICAgIGFyclsxXSA9IG1bMTNdO1xyXG4gICAgICAgICAgICBhcnJbMl0gPSBtWzE0XTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhtWzEyXSwgbVsxM10sIG1bMTRdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbm9kZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbm9kZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCk7XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBub2RlLnNldE5hbWUodGhpcy5uYW1lKTtcclxuICAgICAgICBub2RlLnBvc2l0aW9uLmNvcHkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgbm9kZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIG5vZGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBub2RlLmFkZChjaGlsZHJlbltpXS5jbG9uZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSB0aGUgbm9kZSBhcm91bmQgYSBheGlzIGJ5IGFuZ2xlIGRlZ3JlZXMsIGF4aXMgcGFzc2VzIHRocm91Z2ggcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludCBDZW50ZXIgcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBheGlzICBDZW50ZXIgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9ICAgICAgIGFuZ2xlIFJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAc2VlIGh0dHA6Ly9kb2NzLnVuaXR5M2QuY29tL0RvY3VtZW50YXRpb24vU2NyaXB0UmVmZXJlbmNlL1RyYW5zZm9ybS5Sb3RhdGVBcm91bmQuaHRtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIFJUTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIHBlcmZvcm1hbmNlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCwgYXhpcywgYW5nbGUpIHtcclxuXHJcbiAgICAgICAgICAgIHYuY29weSh0aGlzLnBvc2l0aW9uKS5zdWJ0cmFjdChwb2ludCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5pZGVudGl0eSgpO1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgbm9kZVxyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUocG9pbnQpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5yb3RhdGUoYW5nbGUsIGF4aXMpO1xyXG5cclxuICAgICAgICAgICAgUlRNYXRyaXguZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odGhpcy5yb3RhdGlvbiwgdik7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KFJUTWF0cml4KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uc2NhbGUodGhpcy5zY2FsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFt1cF1cclxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5vcGVuZ2wub3JnL3Nkay9kb2NzL21hbjIveGh0bWwvZ2x1TG9va0F0LnhtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVwKSB7XHJcbiAgICAgICAgICAgIG0ubG9va0F0KHRoaXMucG9zaXRpb24sIHRhcmdldCwgdXAgfHwgdGhpcy5sb2NhbFRyYW5zZm9ybS55KS5pbnZlcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbFRyYW5zZm9ybShtKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJ2ZWMzIGNhbGNBbWJpZW50U0hMaWdodChpbnQgaWR4LCB2ZWMzIE4pIHtcXG4gaW50IG9mZnNldCA9IDkgKiBpZHg7XFxuIHJldHVybiBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1swXVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzFdICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMl0gKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1szXSAqIE4uelxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzRdICogTi54ICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNV0gKiBOLnogKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s2XSAqIE4ueSAqIE4ueFxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzddICogKDMuMCAqIE4ueiAqIE4ueiAtIDEuMClcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s4XSAqIChOLnggKiBOLnggLSBOLnkgKiBOLnkpO1xcbn1cIjtcclxuIiwiaW1wb3J0IGNhbGNBbWJpZW50U0hMaWdodEVzc2wgZnJvbSAnLi9jYWxjQW1iaWVudFNITGlnaHQuZ2xzbC5qcyc7XHJcblxyXG52YXIgdW5pZm9ybVZlYzNQcmVmaXggPSAndW5pZm9ybSB2ZWMzICc7XHJcbnZhciB1bmlmb3JtRmxvYXRQcmVmaXggPSAndW5pZm9ybSBmbG9hdCAnO1xyXG52YXIgZXhwb3J0SGVhZGVyUHJlZml4ID0gJ0BleHBvcnQgY2xheS5oZWFkZXIuJztcclxudmFyIGV4cG9ydEVuZCA9ICdAZW5kJztcclxudmFyIHVuY29uZmlndXJhYmxlID0gJzp1bmNvbmZpZ3VyYWJsZTsnO1xyXG5leHBvcnQgZGVmYXVsdCBbXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnZGlyZWN0aW9uYWxfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0Q29sb3JbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRMaWdodENvbG9yW0FNQklFTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X3NoX2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29sb3JbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1tBTUJJRU5UX1NIX0xJR0hUX0NPVU5UICogOV0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBjYWxjQW1iaWVudFNITGlnaHRFc3NsLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2N1YmVtYXBfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyQ3ViZSBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3BvaW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRQb3NpdGlvbltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAncG9pbnRMaWdodFJhbmdlW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRDb2xvcltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3Nwb3RfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0UG9zaXRpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHREaXJlY3Rpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0UmFuZ2VbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodEZhbGxvZmZGYWN0b3JbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRDb2xvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZFxyXG5dLmpvaW4oJ1xcbicpO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcbmltcG9ydCBsaWdodFNoYWRlciBmcm9tICcuL3NoYWRlci9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuU2hhZGVyWydpbXBvcnQnXShsaWdodFNoYWRlcik7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTGlnaHRcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgTGlnaHQgPSBOb2RlLmV4dGVuZChmdW5jdGlvbigpe1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5MaWdodCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IFJHQiBjb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGludGVuc2l0eTogMS4wLFxyXG5cclxuICAgICAgICAvLyBDb25maWcgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsaWdodCBjYXN0IHNoYWRvd1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNoYWRvdyBtYXAgc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hhZG93UmVzb2x1dGlvbjogNTEyLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBncm91cCwgc2hhZGVyIHdpdGggc2FtZSBgbGlnaHRHcm91cGAgd2lsbCBiZSBhZmZlY3RlZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogT25seSB1c2VmdWwgaW4gZm9yd2FyZCByZW5kZXJpbmdcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdyb3VwOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTGlnaHQucHJvdG90eXBlLiAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIExpZ2h0IHR5cGVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodCNcclxuICAgICAqL1xyXG4gICAgdHlwZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkxpZ2h0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTGlnaHQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBOb2RlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LmNvbG9yID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5jb2xvcik7XHJcbiAgICAgICAgbGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XHJcbiAgICAgICAgbGlnaHQuY2FzdFNoYWRvdyA9IHRoaXMuY2FzdFNoYWRvdztcclxuICAgICAgICBsaWdodC5zaGFkb3dSZXNvbHV0aW9uID0gdGhpcy5zaGFkb3dSZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlnaHQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzQgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjNCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlBsYW5lXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbm9ybWFsXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Rpc3RhbmNlXVxyXG4gKi9cclxudmFyIFBsYW5lID0gZnVuY3Rpb24obm9ybWFsLCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWwgb2YgdGhlIHBsYW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbCB8fCBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0YW50IG9mIHRoZSBwbGFuZSBlcXVhdGlvbiwgdXNlZCBhcyBkaXN0YW5jZSB0byB0aGUgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2UgfHwgMDtcclxufTtcclxuXHJcblBsYW5lLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUGxhbmUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gcG9pbnQgdG8gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogZnVuY3Rpb24ocG9pbnQpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kb3QocG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5KSAtIHRoaXMuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBwcm9qZWN0aW9uIHBvaW50IG9uIHRoZSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBwb2ludFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcHJvamVjdFBvaW50OiBmdW5jdGlvbihwb2ludCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGQgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChwb2ludCk7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHBvaW50LmFycmF5LCB0aGlzLm5vcm1hbC5hcnJheSwgLWQpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHRoZSBwbGFuZSdzIG5vcm1hbCBhbmQgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZMZW4gPSAxIC8gdmVjMy5sZW4odGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5ub3JtYWwuYXJyYXksIGludkxlbik7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSAqPSBpbnZMZW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIHBsYW5lIGludGVyc2VjdCBhIGZydXN0dW1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuRnJ1c3R1bX0gRnJ1c3R1bVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0RnJ1c3R1bTogZnVuY3Rpb24oZnJ1c3R1bSkge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCBjb29yZHMgb2YgZnJ1c3R1bSBpcyBvbiBwbGFuZSBhbGwgdW5kZXIgcGxhbmVcclxuICAgICAgICB2YXIgY29vcmRzID0gZnJ1c3R1bS52ZXJ0aWNlcztcclxuICAgICAgICB2YXIgbm9ybWFsID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIG9uUGxhbmUgPSB2ZWMzLmRvdChjb29yZHNbMF0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgodmVjMy5kb3QoY29vcmRzW2ldLmFycmF5LCBub3JtYWwpID4gdGhpcy5kaXN0YW5jZSkgIT0gb25QbGFuZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiBwbGFuZSBhbmQgYSBnaXZlbiBsaW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBzdGFydCBzdGFydCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gZW5kIGVuZCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0TGluZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciByZCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgZDAgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChzdGFydCk7XHJcbiAgICAgICAgICAgIHZhciBkMSA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KGVuZCk7XHJcbiAgICAgICAgICAgIGlmICgoZDAgPiAwICYmIGQxID4gMCkgfHwgKGQwIDwgMCAmJiBkMSA8IDApKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBwbiA9IHRoaXMubm9ybWFsLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHZhciBybyA9IHN0YXJ0LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBkaXJlY3Rpb25cclxuICAgICAgICAgICAgdmVjMy5zdWIocmQsIGVuZC5hcnJheSwgc3RhcnQuYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShyZCwgcmQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgICAgICAvLyByYXkgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lXHJcbiAgICAgICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgbm9ybWFsdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwb2ludHY0ID0gdmVjNC5jcmVhdGUoKTtcclxuICAgICAgICBwb2ludHY0WzNdID0gMTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obTQpIHtcclxuICAgICAgICAgICAgbTQgPSBtNC5hcnJheTtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvaW50IG9uIHBsYW5lXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXksIHRoaXMuZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQocG9pbnR2NCwgcG9pbnR2NCwgbTQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gdmVjMy5kb3QocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcGxhbmUgbm9ybWFsXHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2UsIG00KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZSwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIG5vcm1hbHY0WzNdID0gMDtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KG5vcm1hbHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChub3JtYWx2NCwgbm9ybWFsdjQsIGludmVyc2VUcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIG5vcm1hbHY0KTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBhbm90aGVyIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKHBsYW5lKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHBsYW5lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlBsYW5lfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgcGxhbmUuY29weSh0aGlzKTtcclxuICAgICAgICByZXR1cm4gcGxhbmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi9QbGFuZSc7XHJcblxyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxudmFyIHZlYzNUcmFuZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbnZhciBtYXRoTWluID0gTWF0aC5taW47XHJcbnZhciBtYXRoTWF4ID0gTWF0aC5tYXg7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuRnJ1c3R1bVxyXG4gKi9cclxudmFyIEZydXN0dW0gPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHBsYW5lcyB0byBlbmNsb3NlIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5QbGFuZVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBsYW5lcyA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5wbGFuZXMucHVzaChuZXcgUGxhbmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb3VuZGluZyBib3ggb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHZlcnRpY2VzIG9mIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICB0aGlzLnZlcnRpY2VzW2ldID0gdmVjMy5mcm9tVmFsdWVzKDAsIDAsIDApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuRnJ1c3R1bS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMjA1MzEyMzEwMDUvaHR0cDovL2NyYXp5am9rZS5mcmVlLmZyL2RvYy8zRC9wbGFuZSUyMGV4dHJhY3Rpb24ucGRmXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcnVzdHVtIGZyb20gYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0RnJvbVByb2plY3Rpb246IGZ1bmN0aW9uKHByb2plY3Rpb25NYXRyaXgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzO1xyXG4gICAgICAgIHZhciBtID0gcHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICB2YXIgbTAgPSBtWzBdLCBtMSA9IG1bMV0sIG0yID0gbVsyXSwgbTMgPSBtWzNdO1xyXG4gICAgICAgIHZhciBtNCA9IG1bNF0sIG01ID0gbVs1XSwgbTYgPSBtWzZdLCBtNyA9IG1bN107XHJcbiAgICAgICAgdmFyIG04ID0gbVs4XSwgbTkgPSBtWzldLCBtMTAgPSBtWzEwXSwgbTExID0gbVsxMV07XHJcbiAgICAgICAgdmFyIG0xMiA9IG1bMTJdLCBtMTMgPSBtWzEzXSwgbTE0ID0gbVsxNF0sIG0xNSA9IG1bMTVdO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgcGxhbmVzXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMF0ubm9ybWFsLmFycmF5LCBtMyAtIG0wLCBtNyAtIG00LCBtMTEgLSBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzBdLmRpc3RhbmNlID0gLShtMTUgLSBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1swXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMV0ubm9ybWFsLmFycmF5LCBtMyArIG0wLCBtNyArIG00LCBtMTEgKyBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzFdLmRpc3RhbmNlID0gLShtMTUgKyBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMl0ubm9ybWFsLmFycmF5LCBtMyArIG0xLCBtNyArIG01LCBtMTEgKyBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzJdLmRpc3RhbmNlID0gLShtMTUgKyBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1syXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbM10ubm9ybWFsLmFycmF5LCBtMyAtIG0xLCBtNyAtIG01LCBtMTEgLSBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzNdLmRpc3RhbmNlID0gLShtMTUgLSBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1szXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNF0ubm9ybWFsLmFycmF5LCBtMyAtIG0yLCBtNyAtIG02LCBtMTEgLSBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s0XS5kaXN0YW5jZSA9IC0obTE1IC0gbTE0KTtcclxuICAgICAgICBwbGFuZXNbNF0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzVdLm5vcm1hbC5hcnJheSwgbTMgKyBtMiwgbTcgKyBtNiwgbTExICsgbTEwKTtcclxuICAgICAgICBwbGFuZXNbNV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xNCk7XHJcbiAgICAgICAgcGxhbmVzWzVdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmIChtMTUgPT09IDApICB7XHJcbiAgICAgICAgICAgIHZhciBhc3BlY3QgPSBtNSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgek5lYXIgPSAtbTE0IC8gKG0xMCAtIDEpO1xyXG4gICAgICAgICAgICB2YXIgekZhciA9IC1tMTQgLyAobTEwICsgMSk7XHJcbiAgICAgICAgICAgIHZhciBmYXJZID0gLXpGYXIgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXJZID0gLXpOZWFyIC8gbTU7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldCgtZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KGZhclkgKiBhc3BlY3QsIGZhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgLy8gdXBkYXRlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIC1mYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBmYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzRdLCAtbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCAtbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBPcnRob2dyYXBoaWMgcHJvamVjdGlvblxyXG4gICAgICAgICAgICB2YXIgbGVmdCA9ICgtMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gKDEgLSBtMTIpIC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB0b3AgPSAoMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIGJvdHRvbSA9ICgtMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXIgPSAoLTEgLSBtMTQpIC8gbTEwO1xyXG4gICAgICAgICAgICB2YXIgZmFyID0gKDEgLSBtMTQpIC8gbTEwO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoTWF0aC5taW4obGVmdCwgcmlnaHQpLCBNYXRoLm1pbihib3R0b20sIHRvcCksIE1hdGgubWluKGZhciwgbmVhcikpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KE1hdGgubWF4KHJpZ2h0LCBsZWZ0KSwgTWF0aC5tYXgodG9wLCBib3R0b20pLCBNYXRoLm1heChuZWFyLCBmYXIpKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBib3VuZGluZ0JveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBib3VuZGluZ0JveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgbWF4WzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCBtaW5bMF0sIG1heFsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IGFuZCBzZXQgdG8gdGhlIGdpdmVuIGJvdW5kaW5nIGJveFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIGdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3g6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcFZlYzMgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oYmJveCwgbWF0cml4KSB7XHJcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgbTQgPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJib3gubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlcnRpY2VzWzBdO1xyXG4gICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWluQXJyLCB0bXBWZWMzKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB0bXBWZWMzKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMF0gPSBtYXRoTWluKHRtcFZlYzNbMF0sIG1pbkFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMV0gPSBtYXRoTWluKHRtcFZlYzNbMV0sIG1pbkFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMl0gPSBtYXRoTWluKHRtcFZlYzNbMl0sIG1pbkFyclsyXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzBdID0gbWF0aE1heCh0bXBWZWMzWzBdLCBtYXhBcnJbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzFdID0gbWF0aE1heCh0bXBWZWMzWzFdLCBtYXhBcnJbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzJdID0gbWF0aE1heCh0bXBWZWMzWzJdLCBtYXhBcnJbMl0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYmJveDtcclxuICAgICAgICB9O1xyXG4gICAgfSkgKClcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgRnJ1c3R1bTtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgRVBTSUxPTiA9IDFlLTU7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJheVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW29yaWdpbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtkaXJlY3Rpb25dXHJcbiAqL1xyXG52YXIgUmF5ID0gZnVuY3Rpb24gKG9yaWdpbiwgZGlyZWN0aW9uKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IG5ldyBWZWN0b3IzKCk7XHJcbn07XHJcblxyXG5SYXkucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBSYXksXHJcblxyXG4gICAgLy8gaHR0cDovL3d3dy5zaWdncmFwaC5vcmcvZWR1Y2F0aW9uL21hdGVyaWFscy9IeXBlckdyYXBoL3JheXRyYWNlL3JheXBsYW5lX2ludGVyc2VjdGlvbi5odG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYSBnaXZlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lLCBvdXQpIHtcclxuICAgICAgICB2YXIgcG4gPSBwbGFuZS5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIGQgPSBwbGFuZS5kaXN0YW5jZTtcclxuICAgICAgICB2YXIgcm8gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgcmQgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICBpZiAoZGl2aWRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHQgPSAodmVjMy5kb3QocG4sIHJvKSAtIGQpIC8gZGl2aWRlcjtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaXJyb3IgdGhlIHJheSBhZ2FpbnN0IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICovXHJcbiAgICBtaXJyb3JBZ2FpbnN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSkge1xyXG4gICAgICAgIC8vIERpc3RhbmNlIHRvIHBsYW5lXHJcbiAgICAgICAgdmFyIGQgPSB2ZWMzLmRvdChwbGFuZS5ub3JtYWwuYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMuZGlyZWN0aW9uLmFycmF5LCB0aGlzLmRpcmVjdGlvbi5hcnJheSwgcGxhbmUubm9ybWFsLmFycmF5LCAtZCAqIDIpO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCkge1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBwb2ludCwgdGhpcy5vcmlnaW4uYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHByb2plY3Rpb24gcG9pbnQgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBiID0gdmVjMy5kb3QodiwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICBpZiAoYiA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMub3JpZ2luLmFycmF5LCBwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGMyID0gdmVjMy5sZW5TcXVhcmVkKHYpO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIHByb2plY3Rpb24gcG9pbnRcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChjMiAtIGIgKiBiKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiByYXkgYW5kIHNwaGVyZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmFkaXVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RTcGhlcmU6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2VudGVyLCByYWRpdXMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICAgICAgY2VudGVyID0gY2VudGVyLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBjZW50ZXIsIG9yaWdpbik7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCBkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLnNxdWFyZWRMZW5ndGgodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICB2YXIgZDIgPSBjMiAtIGIgKiBiO1xyXG5cclxuICAgICAgICAgICAgdmFyIHIyID0gcmFkaXVzICogcmFkaXVzO1xyXG4gICAgICAgICAgICAvLyBObyBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgaWYgKGQyID4gcjIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGEgPSBNYXRoLnNxcnQocjIgLSBkMik7XHJcbiAgICAgICAgICAgIC8vIEZpcnN0IGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDAgPSBiIC0gYTtcclxuICAgICAgICAgICAgLy8gU2Vjb25kIGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDEgPSBiICsgYTtcclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0MCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0MSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNjcmF0Y2hhcGl4ZWwuY29tL2xlc3NvbnMvM2QtYmFzaWMtbGVzc29ucy9sZXNzb24tNy1pbnRlcnNlY3Rpbmctc2ltcGxlLXNoYXBlcy9yYXktYm94LWludGVyc2VjdGlvbi9cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gsIG91dCkge1xyXG4gICAgICAgIHZhciBkaXIgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1pbiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGludmRpcnggPSAxIC8gZGlyWzBdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ5ID0gMSAvIGRpclsxXTtcclxuICAgICAgICB2YXIgaW52ZGlyeiA9IDEgLyBkaXJbMl07XHJcblxyXG4gICAgICAgIHZhciB0bWluLCB0bWF4LCB0eW1pbiwgdHltYXgsIHR6bWluLCB0em1heDtcclxuICAgICAgICBpZiAoaW52ZGlyeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bWF4ID0gKG1pblswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgICAgICB0bWluID0gKG1heFswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW52ZGlyeSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1heCA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1pbiA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR5bWF4KSB8fCAodHltaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eW1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHltaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eW1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHltYXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW52ZGlyeiA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1heCA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1pbiA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR6bWF4KSB8fCAodHptaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0em1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHptaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0em1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHptYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0bWF4IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ID0gdG1pbiA+PSAwID8gdG1pbiA6IHRtYXg7XHJcblxyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NJUMzJUI2bGxlciVFMiU4MCU5M1RydW1ib3JlX2ludGVyc2VjdGlvbl9hbGdvcml0aG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgdGhyZWUgdHJpYW5nbGUgdmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGNcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgIHNpbmdsZVNpZGVkLCBDVyB0cmlhbmdsZSB3aWxsIGJlIGlnbm9yZWRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtiYXJ5Y2VudGVyaWNdIGJhcnljZW50cmljIGNvb3Jkc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RUcmlhbmdsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIGVCQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIGVDQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIEFPID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgdkNyb3NzID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBzaW5nbGVTaWRlZCwgb3V0LCBiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIGEgPSBhLmFycmF5O1xyXG4gICAgICAgICAgICBiID0gYi5hcnJheTtcclxuICAgICAgICAgICAgYyA9IGMuYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQkEsIGIsIGEpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQ0EsIGMsIGEpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVDQSwgZGlyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB2ZWMzLmRvdChlQkEsIHZDcm9zcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZXQgPiAtRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OICYmIGRldCA8IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5zdWIoQU8sIG9yaWdpbiwgYSk7XHJcbiAgICAgICAgICAgIHZhciB1ID0gdmVjMy5kb3QodkNyb3NzLCBBTykgLyBkZXQ7XHJcbiAgICAgICAgICAgIGlmICh1IDwgMCB8fCB1ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIEFPKTtcclxuICAgICAgICAgICAgdmFyIHYgPSB2ZWMzLmRvdChkaXIsIHZDcm9zcykgLyBkZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodiA8IDAgfHwgdiA+IDEgfHwgKHUgKyB2ID4gMSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUJBLCBlQ0EpO1xyXG4gICAgICAgICAgICB2YXIgdCA9IC12ZWMzLmRvdChBTywgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuc2V0KGJhcnljZW50ZXJpYywgKDEgLSB1IC0gdiksIHUsIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIHJheVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBWZWN0b3IzLmFkZCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIHRoaXMub3JpZ2luKTtcclxuICAgICAgICBWZWN0b3IzLnRyYW5zZm9ybU1hdDQodGhpcy5vcmlnaW4sIHRoaXMub3JpZ2luLCBtYXRyaXgpO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIG1hdHJpeCk7XHJcblxyXG4gICAgICAgIFZlY3RvcjMuc3ViKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMubm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIHJheVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gcmF5XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChyYXkpIHtcclxuICAgICAgICBWZWN0b3IzLmNvcHkodGhpcy5vcmlnaW4sIHJheS5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLmRpcmVjdGlvbiwgcmF5LmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG4gICAgICAgIHJheS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiByYXk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5cclxuaW1wb3J0IHZlYzQgZnJvbSAnLi9nbG1hdHJpeC92ZWM0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuQ2FtZXJhXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIENhbWVyYSA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuQ2FtZXJhIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnZlcnNlIG9mIGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW52UHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmlldyBtYXRyaXgsIGVxdWFsIHRvIGludmVyc2Ugb2YgY2FtZXJhJ3Mgd29ybGQgbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3TWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZnJ1c3R1bSBpbiB2aWV3IHNwYWNlXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuRnJ1c3R1bX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcnVzdHVtOiBuZXcgRnJ1c3R1bSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LkNhbWVyYS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgTm9kZS5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgZm9yY2UpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMudmlld01hdHJpeCwgdGhpcy53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHRoaXMucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSB2aWV3IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3TWF0cml4OiBmdW5jdGlvbiAodmlld01hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnZpZXdNYXRyaXgsIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMud29ybGRUcmFuc2Zvcm0sIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0UHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKHByb2plY3Rpb25NYXRyaXgpIHtcclxuICAgICAgICBNYXRyaXg0LmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4LCBwcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBNYXRyaXg0LmludmVydCh0aGlzLmludlByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHByb2plY3Rpb24gbWF0cml4LCBjYWxsZWQgYWZ0ZXIgdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FzdCBhIHBpY2tpbmcgcmF5IGZyb20gY2FtZXJhIG5lYXIgcGxhbmUgdG8gZmFyIHBsYW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBuZGNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SYXl9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2FzdFJheTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmRjLCBvdXQpIHtcclxuICAgICAgICAgICAgdmFyIHJheSA9IG91dCAhPT0gdW5kZWZpbmVkID8gb3V0IDogbmV3IFJheSgpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IG5kYy5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIHkgPSBuZGMuYXJyYXlbMV07XHJcbiAgICAgICAgICAgIHZlYzQuc2V0KHY0LCB4LCB5LCAtMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHJheS5vcmlnaW4uYXJyYXksIHY0LCAxIC8gdjRbM10pO1xyXG5cclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIDEsIDEpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLmludlByb2plY3Rpb25NYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZSh2NCwgdjQsIDEgLyB2NFszXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHJheS5kaXJlY3Rpb24uYXJyYXksIHY0LCByYXkub3JpZ2luLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJheS5kaXJlY3Rpb24uYXJyYXksIHJheS5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICByYXkuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJheS5vcmlnaW4uX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByYXk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkNhbWVyYX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkNhbWVyYS5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhbWVyYTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IExpZ2h0IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgSURFTlRJVFkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG52YXIgV09STERWSUVXID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJzKSB7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICB2YXIgbGlnaHRUeXBlcyA9IE9iamVjdC5rZXlzKGxpZ2h0TnVtYmVycyk7XHJcbiAgICBsaWdodFR5cGVzLnNvcnQoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRUeXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBsaWdodFR5cGUgPSBsaWdodFR5cGVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKGxpZ2h0VHlwZSArICcgJyArIGxpZ2h0TnVtYmVyc1tsaWdodFR5cGVdKTtcclxuICAgIH1cclxuICAgIHZhciBrZXkgPSBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcblxyXG4gICAgaWYgKHByb2dyYW1LZXlDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2dyYW1LZXlDYWNoZVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgcHJvZ3JhbUtleUNhY2hlW2tleV0gPSBpZDtcclxuICAgIHJldHVybiBpZDtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVuZGVyTGlzdCgpIHtcclxuXHJcbiAgICB0aGlzLm9wYXF1ZSA9IFtdO1xyXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX29wYXF1ZUNvdW50ID0gMDtcclxuICAgIHRoaXMuX3RyYW5zcGFyZW50Q291bnQgPSAwO1xyXG59XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5zdGFydENvdW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob2JqZWN0LCBpc1RyYW5zcGFyZW50KSB7XHJcbiAgICBpZiAoaXNUcmFuc3BhcmVudCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRbdGhpcy5fdHJhbnNwYXJlbnRDb3VudCsrXSA9IG9iamVjdDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3BhcXVlW3RoaXMuX29wYXF1ZUNvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuUmVuZGVyTGlzdC5wcm90b3R5cGUuZW5kQ291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50Lmxlbmd0aCA9IHRoaXMuX3RyYW5zcGFyZW50Q291bnQ7XHJcbiAgICB0aGlzLm9wYXF1ZS5sZW5ndGggPSB0aGlzLl9vcGFxdWVDb3VudDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LlNjZW5lLlJlbmRlckxpc3RcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gb3BhcXVlXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPGNsYXkuUmVuZGVyYWJsZT59IHRyYW5zcGFyZW50XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNjZW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIFNjZW5lID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TY2VuZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdsb2JhbCBtYXRlcmlhbCBvZiBzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICBsaWdodHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2VuZSBib3VuZGluZyBib3ggaW4gdmlldyBzcGFjZS5cclxuICAgICAgICAgKiBVc2VkIHdoZW4gY2FtZXJhIG5lZWRzIHRvIGFkdWpzdCB0aGUgbmVhciBhbmQgZmFyIHBsYW5lIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgKiBzbyB0aGF0IHRoZSB2aWV3IGZydXN0dW0gY29udGFpbnMgdGhlIHZpc2libGUgb2JqZWN0cyBhcyB0aWdodGx5IGFzIHBvc3NpYmxlLlxyXG4gICAgICAgICAqIE5vdGljZTpcclxuICAgICAgICAgKiAgSXQgaXMgdXBkYXRlZCBhZnRlciByZW5kZXJpbmcgKGluIHRoZSBzdGVwIG9mIGZydXN0dW0gY3VsbGluZyBwYXNzaW5nbHkpLiBTbyBtYXkgYmUgbm90IHNvIGFjY3VyYXRlLCBidXQgc2F2ZXMgYSBsb3Qgb2YgY2FsY3VsYXRpb25cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdCb3VuZGluZ0JveExhc3RGcmFtZTogbmV3IEJvdW5kaW5nQm94KCksXHJcblxyXG4gICAgICAgIC8vIFVuaWZvcm1zIGZvciBzaGFkb3cgbWFwLlxyXG4gICAgICAgIHNoYWRvd1VuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX2NhbWVyYUxpc3Q6IFtdLFxyXG5cclxuICAgICAgICAvLyBQcm9wZXJ0aWVzIHRvIHNhdmUgdGhlIGxpZ2h0IGluZm9ybWF0aW9uIGluIHRoZSBzY2VuZVxyXG4gICAgICAgIC8vIFdpbGwgYmUgc2V0IGluIHRoZSByZW5kZXIgZnVuY3Rpb25cclxuICAgICAgICBfbGlnaHRVbmlmb3Jtczoge30sXHJcblxyXG4gICAgICAgIF9wcmV2aW91c0xpZ2h0TnVtYmVyOiB7fSxcclxuXHJcbiAgICAgICAgX2xpZ2h0TnVtYmVyOiB7XHJcbiAgICAgICAgICAgIC8vIGdyb3VwSWQ6IHtcclxuICAgICAgICAgICAgICAgIC8vIFBPSU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gRElSRUNUSU9OQUxfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBTUE9UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIEFNQklFTlRfU0hfTElHSFQ6IDBcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9saWdodFByb2dyYW1LZXlzOiB7fSxcclxuXHJcbiAgICAgICAgX25vZGVSZXBvc2l0b3J5OiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlckxpc3RzOiBuZXcgTFJVQ2FjaGUoMjApXHJcblxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fc2NlbmUgPSB0aGlzO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2NlbmUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLy8gQWRkIG5vZGUgdG8gc2NlbmVcclxuICAgIGFkZFRvU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYW1lcmEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NhbWVyYUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGb3VuZCBtdWx0aXBsZSBjYW1lcmEgaW4gb25lIHNjZW5lLiBVc2UgdGhlIGZpc3Qgb25lLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbWVyYUxpc3QucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnlbbm9kZS5uYW1lXSA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBSZW1vdmUgbm9kZSBmcm9tIHNjZW5lXHJcbiAgICByZW1vdmVGcm9tU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGlkeDtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgaWR4ID0gdGhpcy5saWdodHMuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0cy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbm9kZSBieSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge05vZGV9XHJcbiAgICAgKiBAREVQUkVDQVRFRFxyXG4gICAgICovXHJcbiAgICBnZXROb2RlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlUmVwb3NpdG9yeVtuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Z2wuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqL1xyXG4gICAgc2V0TWFpbkNhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2YoY2FtZXJhKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC51bnNoaWZ0KGNhbWVyYSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYUxpc3RbMF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpZ2h0cztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXIgPSB0aGlzLl9saWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgdmFyIGxpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ3JvdXAgPSBsaWdodC5ncm91cDtcclxuICAgICAgICAgICAgaWYgKCFsaWdodE51bWJlcltncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFVzZXIgY2FuIHVzZSBhbnkgdHlwZSBvZiBsaWdodFxyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gPSBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gfHwgMDtcclxuICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0gbGlnaHROdW1iZXI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRQcm9ncmFtS2V5c1tncm91cElkXSA9IGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJbZ3JvdXBJZF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlTGlnaHRVbmlmb3JtcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbm9kZSBhbmQgaXQncyBjaGlsZHJlbiwgaW5jbHVkaW5nIG1lc2gsIGNhbWVyYSwgbGlnaHQsIGV0Yy5cclxuICAgICAqIFVubGlrZSB1c2luZyBgTm9kZSNjbG9uZWAuIEl0IHdpbGwgY2xvbmUgc2tlbGV0b24gYW5kIHJlbWFwIHRoZSBqb2ludHMuIE1hdGVyaWFsIHdpbGwgYWxzbyBiZSBjbG9uZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmVOb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBuZXdOb2RlID0gbm9kZS5jbG9uZSgpO1xyXG4gICAgICAgIHZhciBjbG9uZWROb2Rlc01hcCA9IHt9O1xyXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTm9kZXNNYXAoc05vZGUsIHROb2RlKSB7XHJcbiAgICAgICAgICAgIGNsb25lZE5vZGVzTWFwW3NOb2RlLl9fdWlkX19dID0gdE5vZGU7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNOb2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNDaGlsZCA9IHNOb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIHZhciB0Q2hpbGQgPSB0Tm9kZS5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBidWlsZE5vZGVzTWFwKHNDaGlsZCwgdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBidWlsZE5vZGVzTWFwKG5vZGUsIG5ld05vZGUpO1xyXG5cclxuICAgICAgICBuZXdOb2RlLnRyYXZlcnNlKGZ1bmN0aW9uIChuZXdDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQuc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLnNrZWxldG9uID0gbmV3Q2hpbGQuc2tlbGV0b24uY2xvbmUoY2xvbmVkTm9kZXNNYXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQubWF0ZXJpYWwgPSBuZXdDaGlsZC5tYXRlcmlhbC5jbG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXZlcnNlIHRoZSBzY2VuZSBhbmQgYWRkIHRoZSByZW5kZXJhYmxlIG9iamVjdCB0byB0aGUgcmVuZGVyIGxpc3QuXHJcbiAgICAgKiBJdCBuZWVkcyBjYW1lcmEgZm9yIHRoZSBmcnVzdHVtIGN1bGxpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVwZGF0ZVNjZW5lQm91bmRpbmdCb3hcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgdXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIHZhciBpZCA9IGNhbWVyYS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGlkKTtcclxuICAgICAgICBpZiAoIXJlbmRlckxpc3QpIHtcclxuICAgICAgICAgICAgcmVuZGVyTGlzdCA9IG5ldyBSZW5kZXJMaXN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpc3RzLnB1dChpZCwgcmVuZGVyTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckxpc3Quc3RhcnRDb3VudCgpO1xyXG5cclxuICAgICAgICBpZiAodXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCA9IHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QodGhpcywgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpO1xyXG5cclxuICAgICAgICByZW5kZXJMaXN0LmVuZENvdW50KCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZW5kZXJMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXIgbGlzdC4gVXNlZCBhZnRlciB7QGxpbmsgY2xheS5TY2VuZSN1cGRhdGVSZW5kZXJMaXN0fVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lLlJlbmRlckxpc3R9XHJcbiAgICAgKi9cclxuICAgIGdldFJlbmRlckxpc3Q6IGZ1bmN0aW9uIChjYW1lcmEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGNhbWVyYS5fX3VpZF9fKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKHBhcmVudCwgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpIHtcclxuICAgICAgICBpZiAocGFyZW50LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gT3B0aW1pemVcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50Ll9jaGlsZHJlbltpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICB2YXIgd29ybGRNID0gY2hpbGQuaXNTa2lubmVkTWVzaCgpID8gSURFTlRJVFkgOiBjaGlsZC53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IGNoaWxkLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUoV09STERWSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94ICYmICFnZW9tZXRyeS5ib3VuZGluZ0JveCB8fCAhdGhpcy5pc0ZydXN0dW1DdWxsZWQoY2hpbGQsIGNhbWVyYSwgV09STERWSUVXKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3QuYWRkKGNoaWxkLCBjaGlsZC5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9VcGRhdGVSZW5kZXJMaXN0KGNoaWxkLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYW4gc2NlbmUgb2JqZWN0IGlzIGN1bGxlZCBieSBjYW1lcmEgZnJ1c3R1bVxyXG4gICAgICpcclxuICAgICAqIE9iamVjdCBjYW4gYmUgYSByZW5kZXJhYmxlIG9yIGEgbGlnaHRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHdvcmxkVmlld01hdCByZXByZXNlbnRlZCB3aXRoIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwcm9qZWN0aW9uTWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqL1xyXG4gICAgaXNGcnVzdHVtQ3VsbGVkOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuY3NlLmNoYWxtZXJzLnNlL351ZmZlL3ZmY19iYm94LnBkZlxyXG4gICAgICAgIHZhciBjdWxsaW5nQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgY3VsbGluZ01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgY2FtZXJhLCB3b3JsZFZpZXdNYXQpIHtcclxuICAgICAgICAgICAgLy8gQm91bmRpbmcgYm94IGNhbiBiZSBhIHByb3BlcnR5IG9mIG9iamVjdChsaWtlIGxpZ2h0KSBvciByZW5kZXJhYmxlLmdlb21ldHJ5XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdmFyIGdlb0JCb3ggPSBvYmplY3QuYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgIGlmICghZ2VvQkJveCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdC5za2VsZXRvbiAmJiBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0LnNrZWxldG9uLmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvQkJveCA9IG9iamVjdC5nZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSB3b3JsZFZpZXdNYXQ7XHJcbiAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC50cmFuc2Zvcm1Gcm9tKGdlb0JCb3gsIGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzc2luZ2x5IHVwZGF0ZSB0aGUgc2NlbmUgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGV4Y2x1ZGUgdmVyeSBsYXJnZSBtZXNoIGxpa2UgZ3JvdW5kIHBsYW5lIG9yIHRlcnJhaW4gP1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBPbmx5IHJlbmRlcmVyYWJsZSB3aGljaCBjYXN0IHNoYWRvdyA/XHJcblxyXG4gICAgICAgICAgICAvLyBGSVhNRSBib3VuZGluZ0JveCBiZWNvbWVzIG11Y2ggbGFyZ2VyIGFmdGVyIHRyYW5zZm9ybWQuXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUudW5pb24oY3VsbGluZ0JvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZ25vcmUgZnJ1c3R1bSBjdWxsaW5nIGlmIG9iamVjdCBpcyBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuZnJ1c3R1bUN1bGxpbmcpICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1bGxpbmdCb3VuZGluZ0JveC5pbnRlcnNlY3RCb3VuZGluZ0JveChjYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nTWF0cml4LmFycmF5ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5WzJdIDwgMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xpcCBpbiB0aGUgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXlbMl0gPSAtMWUtMjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LmFwcGx5UHJvamVjdGlvbihjdWxsaW5nTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWluID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXggPSBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBtYXhbMF0gPCAtMSB8fCBtaW5bMF0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzFdIDwgLTEgfHwgbWluWzFdID4gMVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG1heFsyXSA8IC0xIHx8IG1pblsyXSA+IDFcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3VwZGF0ZUxpZ2h0VW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsaWdodCBjYXN0IHNoYWRvdyBiZWZvcmUgdGhlIGxpZ2h0IG5vdCBjYXN0IHNoYWRvd1xyXG4gICAgICAgIGxpZ2h0cy5zb3J0KGxpZ2h0U29ydEZ1bmMpO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHRVbmlmb3JtcyA9IHRoaXMuX2xpZ2h0VW5pZm9ybXM7XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXAgaW4gbGlnaHRVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHRVbmlmb3Jtc1tncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0udmFsdWUubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGxpZ2h0LnVuaWZvcm1UZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdW5pZm9ybVRwbC52YWx1ZShsaWdodCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsaWdodFVuaWZvcm1zW2dyb3VwXVtzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBsdS50eXBlID0gdW5pZm9ybVRwbC50eXBlICsgJ3YnO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh1bmlmb3JtVHBsLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsdS52YWx1ZS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzNmJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICc0Zic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWVbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vua293biBsaWdodCB1bmlmb3JtIHR5cGUgJyArIHVuaWZvcm1UcGwudHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBsaWdodEdyb3Vwcy5wdXNoKGdyb3VwSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE51bWJlckNoYW5nZWRMaWdodEdyb3VwczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gdGhpcy5fbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaWdodE51bWJlckNoYW5nZWQoZ3JvdXBJZCkpIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0R3JvdXBzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgaWYgbGlnaHQgZ3JvdXAgaXMgZGlmZmVyZW50IHdpdGggc2luY2UgbGFzdCBmcmFtZVxyXG4gICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1cGRhdGUgc2hhZGVyIGFuZCBzY2VuZSdzIHVuaWZvcm1zIGluIFJlbmRlcmVyLnJlbmRlclxyXG4gICAgaXNMaWdodE51bWJlckNoYW5nZWQ6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgdmFyIHByZXZMaWdodE51bWJlciA9IHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXI7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIXByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0c051bWJlcnM6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAobGlnaHRHcm91cCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodFByb2dyYW1LZXlzW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRMaWdodFVuaWZvcm1zOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIHNldFVuaWZvcm1zKHVuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IHVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAobHUudHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXhTbG90cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbHUudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBsdS52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QocmVuZGVyZXIsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhTbG90cy5wdXNoKHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0ocmVuZGVyZXIuZ2wsICcxaXYnLCBzeW1ib2wsIHRleFNsb3RzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgbHUudHlwZSwgc3ltYm9sLCBsdS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocHJvZ3JhbSwgbGlnaHRHcm91cCwgcmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgc2V0VW5pZm9ybXModGhpcy5fbGlnaHRVbmlmb3Jtc1tsaWdodEdyb3VwXSwgcHJvZ3JhbSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAvLyBTZXQgc2hhZG93c1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLnNoYWRvd1VuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNlbGYsIGNsZWFyIGFsbCB0aGUgc2NlbmUgb2JqZWN0c1xyXG4gICAgICogQnV0IHJlc291cmNlcyBvZiBnbCBsaWtlIHRleHV0dXJlLCBzaGFkZXIgd2lsbCBub3QgYmUgZGlzcG9zZWQuXHJcbiAgICAgKiBNb3N0bHkgeW91IHNob3VsZCB1c2UgZGlzcG9zZVNjZW5lIG1ldGhvZCBpbiBSZW5kZXJlciB0byBkbyBkaXNwb3NlLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb3BhcXVlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zcGFyZW50TGlzdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodFVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnkgPSB7fTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBsaWdodFNvcnRGdW5jKGEsIGIpIHtcclxuICAgIGlmIChiLmNhc3RTaGFkb3cgJiYgIWEuY2FzdFNoYWRvdykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTY2VuZTtcclxuIiwidmFyIERJUlRZX1BSRUZJWCA9ICdfX2R0X18nO1xyXG5cclxudmFyIENhY2hlID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX2NvbnRleHRJZCA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIHVzZTogZnVuY3Rpb24gKGNvbnRleHRJZCwgZG9jdW1lbnRTY2hlbWEpIHtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGlmICghY2FjaGVzW2NvbnRleHRJZF0pIHtcclxuICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSB7fTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSBkb2N1bWVudFNjaGVtYSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRleHRJZCA9IGNvbnRleHRJZDtcclxuXHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNhY2hlc1tjb250ZXh0SWRdO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dFtrZXldID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkaXJ0eUFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZyZXNoOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2hBbGw6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2ldW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xyXG4gICAgICAgIHJldHVybiAgIWNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICB8fCBjb250ZXh0W2tleV0gPT09IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0SWQpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWxldGU6IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY29udGV4dFtrZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhckFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlcyA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGVhY2hDb250ZXh0IDogZnVuY3Rpb24gKGNiLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWNoZXMpO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNiICYmIGNiLmNhbGwoY29udGV4dCwga2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgbWlzczogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiAhIHRoaXMuX2NvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufTtcclxuXHJcbkNhY2hlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhY2hlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FjaGU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5mdW5jdGlvbiBnZXRBcnJheUN0b3JCeVR5cGUgKHR5cGUpIHtcclxuICAgIHJldHVybiAoe1xyXG4gICAgICAgICdieXRlJzogdmVuZG9yLkludDhBcnJheSxcclxuICAgICAgICAndWJ5dGUnOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgICAgICAnc2hvcnQnOiB2ZW5kb3IuSW50MTZBcnJheSxcclxuICAgICAgICAndXNob3J0JzogdmVuZG9yLlVpbnQxNkFycmF5XHJcbiAgICB9KVt0eXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYWtlQXR0cktleShhdHRyTmFtZSkge1xyXG4gICAgcmV0dXJuICdhdHRyXycgKyBhdHRyTmFtZTtcclxufVxyXG4vKipcclxuICogR2VvbWV0cnlCYXNlIGF0dHJpYnV0ZVxyXG4gKiBAYWxpYXMgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gQXR0cmlidXRlKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRyaWJ1dGUgdHlwZVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdieXRlJ2BcclxuICAgICAqICArIGAndWJ5dGUnYFxyXG4gICAgICogICsgYCdzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ3VzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ2Zsb2F0J2AgTW9zdCBjb21tb25seSB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogU2l6ZSBvZiBhdHRyaWJ1dGUgY29tcG9uZW50LiAxIC0gNC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICAvKipcclxuICAgICAqIFNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdQT1NJVElPTidgXHJcbiAgICAgKiAgKyBgJ05PUk1BTCdgXHJcbiAgICAgKiAgKyBgJ0JJTk9STUFMJ2BcclxuICAgICAqICArIGAnVEFOR0VOVCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEXzEnYFxyXG4gICAgICogICsgYCdDT0xPUidgXHJcbiAgICAgKiAgKyBgJ0pPSU5UJ2BcclxuICAgICAqICArIGAnV0VJR0hUJ2BcclxuICAgICAqXHJcbiAgICAgKiBJbiBzaGFkZXIsIGF0dHJpYnV0ZSB3aXRoIHNhbWUgc2VtYW50aWMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG1hcHBlZC4gRm9yIGV4YW1wbGU6XHJcbiAgICAgKiBgYGBnbHNsXHJcbiAgICAgKiBhdHRyaWJ1dGUgdmVjMyBwb3M6IFBPU0lUSU9OXHJcbiAgICAgKiBgYGBcclxuICAgICAqIHdpbGwgdXNlIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2l0aCBzZW1hbnRpYyBQT1NJVElPTiBpbiBnZW9tZXRyeSwgbm8gbWF0dGVyIHdoYXQgbmFtZSBpdCB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cclxuICAgICAqIEB0eXBlIHtUeXBlZEFycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAvLyBJbml0IGdldHRlciBzZXR0ZXJcclxuICAgIHN3aXRjaCAoc2l6ZSkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVtpZHhdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2lkeF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gQ29weSBmcm9tIHNvdXJjZSB0byB0YXJnZXRcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3RhcmdldF0gPSB0aGlzLnZhbHVlW3RhcmdldF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeCAqIDJdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeCAqIDIgKyAxXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMjtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAyO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSBpZHggKiAzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4M107XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4MyArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDMgKyAyXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4MyArIDJdID0gdmFsWzJdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDM7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gMztcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeDRdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeDQgKyAxXTtcclxuICAgICAgICAgICAgICAgIG91dFsyXSA9IGFycltpZHg0ICsgMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbM10gPSBhcnJbaWR4NCArIDNdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDRdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDNdID0gdmFsWzNdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDQ7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gNDtcclxuICAgICAgICAgICAgICAgIC8vIGNvcHlXaXRoaW4gaXMgZXh0cmVtZWx5IHNsb3dcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgM10gPSBhcnJbc291cmNlICsgM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgaXRlbSB2YWx1ZSBhdCBnaXZlIGluZGV4LiBTZWNvbmQgcGFyYW1ldGVyIHZhbCBpcyBudW1iZXIgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXXxudW1iZXJ9IHZhbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuc2V0KDAsIFsxLCAxLCAxXSk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgb3V0IGlzIG5vIG5lZWQgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXX0gW291dF1cclxuICogQGV4YW1wbGVcclxuICogZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmdldCgwLCBvdXQpO1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIHZlcnRleCBjb3VudFxyXG4gKiBAcGFyYW0ge251bWJlcn0gblZlcnRleFxyXG4gKi9cclxuQXR0cmlidXRlLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKG5WZXJ0ZXgpIHtcclxuICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCAhPSBuVmVydGV4ICogdGhpcy5zaXplKSB7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoblZlcnRleCAqIHRoaXMuc2l6ZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhdHRyaWJ1dGUgd2l0aCBnaXZlbiBhcnJheS4gV2hpY2ggY2FuIGJlIDEgZGltZW5zaW9uYWwgb3IgMiBkaW1lbnNpb25hbFxyXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbLTEsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDBdXHJcbiAqICApO1xyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbIFstMSwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDEsIDBdIF1cclxuICogICk7XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xyXG4gICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgIHZhciB2YWx1ZTtcclxuICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgaWYgKGFycmF5WzBdICYmIChhcnJheVswXS5sZW5ndGgpKSB7XHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xyXG4gICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbn07XHJcblxyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oY29weVZhbHVlKSB7XHJcbiAgICB2YXIgcmV0ID0gbmV3IEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHRoaXMudHlwZSwgdGhpcy5zaXplLCB0aGlzLnNlbWFudGljKTtcclxuICAgIC8vIEZJWE1FXHJcbiAgICBpZiAoY29weVZhbHVlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd0b2RvJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQXR0cmlidXRlQnVmZmVyKG5hbWUsIHR5cGUsIGJ1ZmZlciwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLnNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG5cclxuICAgIC8vIFRvIGJlIHNldCBpbiBtZXNoXHJcbiAgICAvLyBzeW1ib2wgaW4gdGhlIHNoYWRlclxyXG4gICAgdGhpcy5zeW1ib2wgPSAnJztcclxuXHJcbiAgICAvLyBOZWVkcyByZW1vdmUgZmxhZ1xyXG4gICAgdGhpcy5uZWVkc1JlbW92ZSA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJbmRpY2VzQnVmZmVyKGJ1ZmZlcikge1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLmNvdW50ID0gMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJhc2Ugb2YgYWxsIGdlb21ldHJ5LiBVc2Uge0BsaW5rIGNsYXkuR2VvbWV0cnl9IGZvciBjb21tb24gM0QgdXNhZ2UuXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5QmFzZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnlCYXNlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEluZGljZXMgb2YgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQxNkFycmF5fFVpbnQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluZGljZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHZlcnRpY2VzIGRhdGEgZHluYW1pY2FsbHkgdXBkYXRlZC5cclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIHZhbHVlIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXIgZmlyc3QgcmVuZGVyIGlmIGR5YW5taWMgaXMgZmFsc2UuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2VuYWJsZWRBdHRyaWJ1dGVzOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgLy8gSW5pdCBpdCBoZXJlIHRvIGF2b2lkIGRlb3B0aW1pemF0aW9uIHdoZW4gaXQncyBhc3NpZ25lZCBpbiBhcHBsaWNhdGlvbiBkeW5hbWljYWxseVxyXG4gICAgICAgIF9fdXNlZDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fYXR0cmlidXRlTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyk7XHJcblxyXG4gICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTWFpbiBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIHRvIGNvdW50IHZlcnRleCBudW1iZXJcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG1haW5BdHRyaWJ1dGU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiB4LCB5IGFyZSBOREMuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAoeCwgeSwgcmVuZGVyZXIsIGNhbWVyYSwgcmVuZGVyYWJsZSwgb3V0KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcmF5IHBpY2tpbmcgYWxnb3JpdGhtIGluc3RlYWQgb2YgZGVmYXVsdFxyXG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogKHJheTogY2xheS5SYXksIHJlbmRlcmFibGU6IGNsYXkuUmVuZGVyYWJsZSwgb3V0OiBBcnJheSkgPT4gYm9vbGVhblxyXG4gICAgICogYGBgXHJcbiAgICAgKiBAdHlwZSB7P0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBwaWNrQnlSYXk6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIGF0dHJpYnV0ZXMgYW5kIGluZGljZXMgaW4gZ2VvbWV0cnkgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogVXN1YWxseSBjYWxsZWQgYWZ0ZXIgeW91IGNoYW5nZSB0aGUgZGF0YSBpbiBhdHRyaWJ1dGVzLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHlBdHRyaWJ1dGUoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5SW5kaWNlcygpO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHkoJ2FueScpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0aGUgaW5kaWNlcyBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5SW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdpbmRpY2VzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBhdHRyaWJ1dGVzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0ck5hbWVdXHJcbiAgICAgKi9cclxuICAgIGRpcnR5QXR0cmlidXRlOiBmdW5jdGlvbiAoYXR0ck5hbWUpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbChtYWtlQXR0cktleShhdHRyTmFtZSkpO1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdhdHRyaWJ1dGVzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG91dFxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKGlkeCA8IHRoaXMudHJpYW5nbGVDb3VudCAmJiBpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIG91dFswXSA9IGluZGljZXNbaWR4ICogM107XHJcbiAgICAgICAgICAgIG91dFsxXSA9IGluZGljZXNbaWR4ICogMyArIDFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSBpbmRpY2VzW2lkeCAqIDMgKyAyXTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBhcnIpIHtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICBpbmRpY2VzW2lkeCAqIDNdID0gYXJyWzBdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDFdID0gYXJyWzFdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDJdID0gYXJyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1VzZUluZGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmluZGljZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSBpbmRpY2VzIGZyb20gYW4gYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gICAgICovXHJcbiAgICBpbml0SW5kaWNlc0Zyb21BcnJheTogZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gdGhpcy52ZXJ0ZXhDb3VudCA+IDB4ZmZmZlxyXG4gICAgICAgICAgICA/IHZlbmRvci5VaW50MzJBcnJheSA6IHZlbmRvci5VaW50MTZBcnJheTtcclxuICAgICAgICAvLyBDb252ZXJ0IDJkIGFycmF5IHRvIGZsYXRcclxuICAgICAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IDM7XHJcblxyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5Lmxlbmd0aCAqIHNpemUpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW24rK10gPSBhcnJheVtpXVtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluZGljZXMgPSB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VtYW50aWNdXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYiA9IG5ldyBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHJpYjtcclxuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYjtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgdmFyIGlkeCA9IGF0dHJpYnV0ZUxpc3QuaW5kZXhPZihuYW1lKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0cmlidXRlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlfVxyXG4gICAgICovXHJcbiAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW5hYmxlZCBhdHRyaWJ1dGVzIG5hbWUgbGlzdFxyXG4gICAgICogQXR0cmlidXRlIHdoaWNoIGhhcyB0aGUgc2FtZSB2ZXJ0ZXggbnVtYmVyIHdpdGggcG9zaXRpb24gaXMgdHJlYXRlZCBhcyBhIGVuYWJsZWQgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgICAqL1xyXG4gICAgZ2V0RW5hYmxlZEF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLl9lbmFibGVkQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgLy8gQ2FjaGVcclxuICAgICAgICBpZiAoZW5hYmxlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gdGhpcy52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZS5sZW5ndGggPT09IG5WZXJ0ZXggKiBhdHRyaWIuc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbmFibGVkQXR0cmlidXRlcyA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QnVmZmVyQ2h1bmtzOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGlzQXR0cmlidXRlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgIHZhciBpc0luZGljZXNEaXJ0eSA9IGNhY2hlLmlzRGlydHkoJ2luZGljZXMnKTtcclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnVmZmVyKHJlbmRlcmVyLmdsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpO1xyXG4gICAgICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLmZyZXNoKG1ha2VBdHRyS2V5KGVuYWJsZWRBdHRyaWJ1dGVzW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2F0dHJpYnV0ZXMnKTtcclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2luZGljZXMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZnJlc2goJ2FueScpO1xyXG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlQnVmZmVyOiBmdW5jdGlvbiAoX2dsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICB2YXIgZmlyc3RVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWNodW5rcykge1xyXG4gICAgICAgICAgICBjaHVua3MgPSBbXTtcclxuICAgICAgICAgICAgLy8gSW50aWFsaXplXHJcbiAgICAgICAgICAgIGNodW5rc1swXSA9IHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlcjogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ2NodW5rcycsIGNodW5rcyk7XHJcbiAgICAgICAgICAgIGZpcnN0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSBjaHVuay5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVyTWFwID0ge307XHJcbiAgICAgICAgICAgIGlmICghZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlck1hcFthdHRyaWJ1dGVCdWZmZXJzW2ldLm5hbWVdID0gYXR0cmlidXRlQnVmZmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBGSVhNRSBJZiBzb21lIGF0dHJpYnV0ZXMgcmVtb3ZlZFxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbbmFtZV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckluZm87XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJNYXBbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IF9nbC5jcmVhdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYWNoZS5pc0RpcnR5KG1ha2VBdHRyS2V5KG5hbWUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHdoZW4gdGhleSBhcmUgZGlydHkuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVXNlIEJ1ZmZlclN1YkRhdGE/XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuQVJSQVlfQlVGRkVSLCBhdHRyaWJ1dGUudmFsdWUsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnNba10gPSBuZXcgQXR0cmlidXRlQnVmZmVyKG5hbWUsIGF0dHJpYnV0ZS50eXBlLCBidWZmZXIsIGF0dHJpYnV0ZS5zaXplLCBhdHRyaWJ1dGUuc2VtYW50aWMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlcyBidWZmZXJzLlxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBrOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJ1dGVCdWZmZXJzW2ldLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVycy5sZW5ndGggPSBrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpICYmIChpc0luZGljZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyID0gbmV3IEluZGljZXNCdWZmZXIoX2dsLmNyZWF0ZUJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgICAgIGNodW5rLmluZGljZXNCdWZmZXIgPSBpbmRpY2VzQnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNCdWZmZXIuY291bnQgPSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN2ZXJ0ZXhDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3ZlcnRleENvdW50Jywge1xyXG5cclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWFpbkF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1t0aGlzLm1haW5BdHRyaWJ1dGVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtYWluQXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMuX2F0dHJpYnV0ZUxpc3RbMF1dO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUgfHwgIW1haW5BdHRyaWJ1dGUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtYWluQXR0cmlidXRlLnZhbHVlLmxlbmd0aCAvIG1haW5BdHRyaWJ1dGUuc2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgY2xheS5HZW9tZXRyeUJhc2UjdHJpYW5nbGVDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3RyaWFuZ2xlQ291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIGlmICghaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kaWNlcy5sZW5ndGggLyAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbkdlb21ldHJ5QmFzZS5TVEFUSUNfRFJBVyA9IGdsZW51bS5TVEFUSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLkRZTkFNSUNfRFJBVyA9IGdsZW51bS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVyA9IGdsZW51bS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXIgPSBBdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyID0gSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUgPSBBdHRyaWJ1dGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZW9tZXRyeUJhc2U7XHJcbiIsImltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlIGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuXHJcbnZhciB2ZWMzQ3JlYXRlID0gdmVjMy5jcmVhdGU7XHJcbnZhciB2ZWMzQWRkID0gdmVjMy5hZGQ7XHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcblxyXG52YXIgQXR0cmlidXRlID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZTtcclxuXHJcbi8qKlxyXG4gKiBHZW9tZXRyeSBpbiBDbGF5R0wgY29udGFpbnMgdmVydGV4IGF0dHJpYnV0ZXMgb2YgbWVzaC4gVGhlc2UgdmVydGV4IGF0dHJpYnV0ZXMgd2lsbCBiZSBmaW5hbGx5IHByb3ZpZGVkIHRvIHRoZSB7QGxpbmsgY2xheS5TaGFkZXJ9LlxyXG4gKiBEaWZmZXJlbnQge0BsaW5rIGNsYXkuU2hhZGVyfSBuZWVkcyBkaWZmZXJlbnQgYXR0cmlidXRlcy4gSGVyZSBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBidWlsdGluIHNoYWRlcnMuXHJcbiAqXHJcbiAqICsgcG9zaXRpb246IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRleGNvb3JkMDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgY29sb3I6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHdlaWdodDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgam9pbnQ6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIG5vcm1hbDogYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRhbmdlbnQ6IGBjbGF5LnN0YW5kYXJkYFxyXG4gKlxyXG4gKiAjIyMjIENyZWF0ZSBhIHByb2NlZHVyYWwgZ2VvbWV0cnlcclxuICpcclxuICogQ2xheUdMIHByb3ZpZGVzIGEgY291cGxlIG9mIGJ1aWx0aW4gcHJvY2VkdXJhbCBnZW9tZXRyaWVzLiBJbmxjdWRpbmc6XHJcbiAqXHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN1YmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuUGxhbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5Db25lfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZX1cclxuICpcclxuICogSXQncyBzaW1wbGUgdG8gY3JlYXRlIGEgYmFzaWMgZ2VvbWV0cnkgd2l0aCB0aGVzZSBjbGFzc2VzLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgc3BoZXJlID0gbmV3IGNsYXkuZ2VvbWV0cnkuU3BoZXJlKHtcclxuICAgIHJhZGl1czogMlxyXG59KTtcclxuYGBgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIHRoZSBnZW9tZXRyeSBkYXRhIGJ5IHlvdXJzZWxmXHJcbiAqXHJcbiAqIFVzdWFsbHkgdGhlIHZlcnRleCBhdHRyaWJ1dGVzIGRhdGEgYXJlIGNyZWF0ZWQgYnkgdGhlIHtAbGluayBjbGF5LmxvYWRlci5HTFRGfSBvciBwcm9jZWR1cmFsIGdlb21ldHJpZXMgbGlrZSB7QGxpbmsgY2xheS5nZW9tZXRyeS5TcGhlcmV9LlxyXG4gKiBCZXNpZGVzIHRoZXNlLCB5b3UgY2FuIGNyZWF0ZSB0aGUgZGF0YSBtYW51YWxseS4gSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIHRvIGNyZWF0ZSBhIHRyaWFuZ2xlLlxyXG5gYGBqc1xyXG52YXIgVFJJQU5HTEVfUE9TSVRJT05TID0gW1xyXG4gICAgWy0wLjUsIC0wLjUsIDBdLFxyXG4gICAgWzAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMCwgMC41LCAwXVxyXG5dO1xyXG52YXIgZ2VvbWV0cnkgPSBuZXcgY2xheS5TdGF0aWNHZW9tZXRyeUJhc2UoKTtcclxuLy8gQWRkIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZS5cclxuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkoVFJJQU5HTEVfUE9TSVRJT05TKTtcclxuYGBgXHJcbiAqIFRoZW4geW91IGNhbiB1c2UgdGhlIHV0aWxpdHkgbWV0aG9kcyBsaWtlIGBnZW5lcmF0ZVZlcnRleE5vcm1hbHNgLCBgZ2VuZXJhdGVUYW5nZW50c2AgdG8gY3JlYXRlIHRoZSByZW1haW5pbmcgbmVjZXNzYXJ5IGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqXHJcbiAqICMjIyMgVXNlIHdpdGggY3VzdG9tIHNoYWRlcnNcclxuICpcclxuICogSWYgeW91IHdhbid0IHRvIHdyaXRlIGN1c3RvbSBzaGFkZXJzLiBEb24ndCBmb3JnZXQgdG8gYWRkIFNFTUFOVElDUyB0byB0aGVzZSBhdHRyaWJ1dGVzLiBGb3IgZXhhbXBsZVxyXG4gKlxyXG4gYGBgZ2xzbFxyXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XHJcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XHJcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xyXG5cclxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcclxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xyXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XHJcbmBgYFxyXG4gKiBUaGVzZSBgUE9TSVRJT05gLCBgVEVYQ09PUkRfMGAsIGBOT1JNQUxgIGFyZSBTRU1BTlRJQ1Mgd2hpY2ggd2lsbCBtYXAgdGhlIGF0dHJpYnV0ZXMgaW4gc2hhZGVyIHRvIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBHZW9tZXRyeUJhc2VcclxuICpcclxuICogQXZhaWxhYmxlIGF0dHJpYnV0ZXMgU0VNQU5USUNTIGluY2x1ZGVzIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYFRFWENPT1JEXzFgIGBOT1JNQUxgLCBgVEFOR0VOVGAsIGBDT0xPUmAsIGBXRUlHSFRgLCBgSk9JTlRgLlxyXG4gKlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5HZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5ID0gR2VvbWV0cnlCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS4gSW5jbHVkaW5nOlxyXG4gICAgICAgICAqICArIGBwb3NpdGlvbmBcclxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQwYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDFgXHJcbiAgICAgICAgICogICsgYG5vcm1hbGBcclxuICAgICAgICAgKiAgKyBgdGFuZ2VudGBcclxuICAgICAgICAgKiAgKyBgY29sb3JgXHJcbiAgICAgICAgICogICsgYHdlaWdodGBcclxuICAgICAgICAgKiAgKyBgam9pbnRgXHJcbiAgICAgICAgICogICsgYGJhcnljZW50cmljYFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBjbGF5Lkdlb21ldHJ5LkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEF0dHJpYnV0ZSgncG9zaXRpb24nLCAnZmxvYXQnLCAzLCAnUE9TSVRJT04nKSxcclxuICAgICAgICAgICAgdGV4Y29vcmQwOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDAnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMCcpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDE6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMScsICdmbG9hdCcsIDIsICdURVhDT09SRF8xJyksXHJcbiAgICAgICAgICAgIG5vcm1hbDogbmV3IEF0dHJpYnV0ZSgnbm9ybWFsJywgJ2Zsb2F0JywgMywgJ05PUk1BTCcpLFxyXG4gICAgICAgICAgICB0YW5nZW50OiBuZXcgQXR0cmlidXRlKCd0YW5nZW50JywgJ2Zsb2F0JywgNCwgJ1RBTkdFTlQnKSxcclxuICAgICAgICAgICAgY29sb3I6IG5ldyBBdHRyaWJ1dGUoJ2NvbG9yJywgJ2Zsb2F0JywgNCwgJ0NPTE9SJyksXHJcbiAgICAgICAgICAgIC8vIFNraW5uaW5nIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgLy8gRWFjaCB2ZXJ0ZXggY2FuIGJlIGJpbmQgdG8gNCBib25lcywgYmVjYXVzZSB0aGVcclxuICAgICAgICAgICAgLy8gc3VtIG9mIHdlaWdodHMgaXMgMSwgc28gdGhlIHdlaWdodHMgaXMgc3RvcmVkIGluIHZlYzMgYW5kIHRoZSBsYXN0XHJcbiAgICAgICAgICAgIC8vIGNhbiBiZSBjYWxjdWxhdGVkIGJ5IDEtdy54LXcueS13LnpcclxuICAgICAgICAgICAgd2VpZ2h0OiBuZXcgQXR0cmlidXRlKCd3ZWlnaHQnLCAnZmxvYXQnLCAzLCAnV0VJR0hUJyksXHJcbiAgICAgICAgICAgIGpvaW50OiBuZXcgQXR0cmlidXRlKCdqb2ludCcsICdmbG9hdCcsIDQsICdKT0lOVCcpLFxyXG4gICAgICAgICAgICAvLyBGb3Igd2lyZWZyYW1lIGRpc3BsYXlcclxuICAgICAgICAgICAgLy8gaHR0cDovL2NvZGVmbG93Lm9yZy9lbnRyaWVzLzIwMTIvYXVnLzAyL2Vhc3ktd2lyZWZyYW1lLWRpc3BsYXktd2l0aC1iYXJ5Y2VudHJpYy1jb29yZGluYXRlcy9cclxuICAgICAgICAgICAgYmFyeWNlbnRyaWM6IG5ldyBBdHRyaWJ1dGUoJ2JhcnljZW50cmljJywgJ2Zsb2F0JywgMywgbnVsbCksXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWxjdWxhdGVkIGJvdW5kaW5nIGJveCBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5LnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgbWFpbkF0dHJpYnV0ZTogJ3Bvc2l0aW9uJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBib3VuZGluZ0JveCBvZiBHZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVCb3VuZGluZ0JveDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBiYm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICBpZiAoIWJib3gpIHtcclxuICAgICAgICAgICAgYmJveCA9IHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc0FyciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICBpZiAocG9zQXJyICYmIHBvc0Fyci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1pbkFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1heEFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgcG9zQXJyLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgIHZhciB4ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHogPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICh4IDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5IDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6IDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHo7IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeCA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB4OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB5OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeiA+IG1heEFyclsyXSkgeyBtYXhBcnJbMl0gPSB6OyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciB2ZXJ0ZXguXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMgfHwgbm9ybWFscy5sZW5ndGggIT09IHBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkocG9zaXRpb25zLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSZXNldFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaV0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcbiAgICAgICAgICAgIC8vIEFscmVhZHkgYmUgd2VpZ2h0ZWQgYnkgdGhlIHRyaWFuZ2xlIGFyZWFcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMytpXSA9IG5vcm1hbHNbaTEqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMraV0gPSBub3JtYWxzW2kyKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMyozK2ldID0gbm9ybWFsc1tpMyozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmVjM1NldChuLCBub3JtYWxzW2ldLCBub3JtYWxzW2krMV0sIG5vcm1hbHNbaSsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzBdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzFdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgbm9ybWFscyBwZXIgZmFjZS5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVGYWNlTm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShuLCBuKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kxKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHRhbmdlbnRzIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVGFuZ2VudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIGlmICghYXR0cmlidXRlcy50YW5nZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkoblZlcnRleCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghdGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbWV0cnkgd2l0aG91dCB0ZXhjb29yZHMgY2FuXFwndCBnZW5lcmF0ZSB0YW5nZW50cy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRhbjEgPSBbXTtcclxuICAgICAgICB2YXIgdGFuMiA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRhbjFbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgICAgIHRhbjJbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2RpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgdGRpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGkrKztcclxuICAgICAgICAgICAgICAgIGkyID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzdDFzID0gdGV4Y29vcmRzW2kxICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDJzID0gdGV4Y29vcmRzW2kyICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDNzID0gdGV4Y29vcmRzW2kzICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDF0ID0gdGV4Y29vcmRzW2kxICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QydCA9IHRleGNvb3Jkc1tpMiAqIDIgKyAxXSxcclxuICAgICAgICAgICAgICAgIHN0M3QgPSB0ZXhjb29yZHNbaTMgKiAyICsgMV0sXHJcblxyXG4gICAgICAgICAgICAgICAgcDF4ID0gcG9zaXRpb25zW2kxICogM10sXHJcbiAgICAgICAgICAgICAgICBwMnggPSBwb3NpdGlvbnNbaTIgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAzeCA9IHBvc2l0aW9uc1tpMyAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDF5ID0gcG9zaXRpb25zW2kxICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDJ5ID0gcG9zaXRpb25zW2kyICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDN5ID0gcG9zaXRpb25zW2kzICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDF6ID0gcG9zaXRpb25zW2kxICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDJ6ID0gcG9zaXRpb25zW2kyICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDN6ID0gcG9zaXRpb25zW2kzICogMyArIDJdO1xyXG5cclxuICAgICAgICAgICAgdmFyIHgxID0gcDJ4IC0gcDF4LFxyXG4gICAgICAgICAgICAgICAgeDIgPSBwM3ggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB5MSA9IHAyeSAtIHAxeSxcclxuICAgICAgICAgICAgICAgIHkyID0gcDN5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgejEgPSBwMnogLSBwMXosXHJcbiAgICAgICAgICAgICAgICB6MiA9IHAzeiAtIHAxejtcclxuXHJcbiAgICAgICAgICAgIHZhciBzMSA9IHN0MnMgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgczIgPSBzdDNzIC0gc3QxcyxcclxuICAgICAgICAgICAgICAgIHQxID0gc3QydCAtIHN0MXQsXHJcbiAgICAgICAgICAgICAgICB0MiA9IHN0M3QgLSBzdDF0O1xyXG5cclxuICAgICAgICAgICAgdmFyIHIgPSAxLjAgLyAoczEgKiB0MiAtIHQxICogczIpO1xyXG4gICAgICAgICAgICBzZGlyWzBdID0gKHQyICogeDEgLSB0MSAqIHgyKSAqIHI7XHJcbiAgICAgICAgICAgIHNkaXJbMV0gPSAodDIgKiB5MSAtIHQxICogeTIpICogcjtcclxuICAgICAgICAgICAgc2RpclsyXSA9ICh0MiAqIHoxIC0gdDEgKiB6MikgKiByO1xyXG5cclxuICAgICAgICAgICAgdGRpclswXSA9IChzMSAqIHgyIC0gczIgKiB4MSkgKiByO1xyXG4gICAgICAgICAgICB0ZGlyWzFdID0gKHMxICogeTIgLSBzMiAqIHkxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMl0gPSAoczEgKiB6MiAtIHMyICogejEpICogcjtcclxuXHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpMV0sIHRhbjFbaTFdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kyXSwgdGFuMVtpMl0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTNdLCB0YW4xW2kzXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpMV0sIHRhbjJbaTFdLCB0ZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kyXSwgdGFuMltpMl0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTNdLCB0YW4yW2kzXSwgdGRpcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXAgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG5Dcm9zc1QgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgblswXSA9IG5vcm1hbHNbaSAqIDNdO1xyXG4gICAgICAgICAgICBuWzFdID0gbm9ybWFsc1tpICogMyArIDFdO1xyXG4gICAgICAgICAgICBuWzJdID0gbm9ybWFsc1tpICogMyArIDJdO1xyXG4gICAgICAgICAgICB2YXIgdCA9IHRhbjFbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6ZVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHRtcCwgbiwgdmVjMy5kb3QobiwgdCkpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih0bXAsIHQsIHRtcCk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcCwgdG1wKTtcclxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhhbmRlZG5lc3MuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3MobkNyb3NzVCwgbiwgdCk7XHJcbiAgICAgICAgICAgIHRhbmdlbnRzW2kgKiA0XSA9IHRtcFswXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAxXSA9IHRtcFsxXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAyXSA9IHRtcFsyXTtcclxuICAgICAgICAgICAgLy8gUEVORElORyBjYW4gY29uZmlnID9cclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAzXSA9IHZlYzMuZG90KG5Dcm9zc1QsIHRhbjJbaV0pIDwgMC4wID8gLTEuMCA6IDEuMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHZlcnRpY2VzIGFyZSBub3Qgc2hhcmVkIGJ5IGRpZmZlcmVudCBpbmRpY2VzLlxyXG4gICAgICovXHJcbiAgICBpc1VuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleENvdW50ID09PSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgdW5pcXVlIHZlcnRleCBmb3IgZWFjaCBpbmRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVVbmlxdWVWZXJ0ZXg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQgfHwgIXRoaXMuaW5kaWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbmRpY2VzLmxlbmd0aCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQzMkFycmF5KHRoaXMuaW5kaWNlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVMaXN0ID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICB2YXIgb2xkQXR0clZhbHVlcyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lTGlzdFthXTtcclxuICAgICAgICAgICAgb2xkQXR0clZhbHVlc1tuYW1lXSA9IGF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0uaW5pdCh0aGlzLmluZGljZXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZU5hbWVMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlc1tuYW1lXS5zaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yICogc2l6ZSArIGtdID0gb2xkQXR0clZhbHVlc1tuYW1lXVtpaSAqIHNpemUgKyBrXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gY3Vyc29yO1xyXG4gICAgICAgICAgICBjdXJzb3IrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBmb3Igd2lyZWZyYW1lIGRyYXcuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlQmFyeWNlbnRyaWM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVW5pcXVlVmVydGV4KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVVuaXF1ZVZlcnRleCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlcy5iYXJ5Y2VudHJpYy52YWx1ZTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAvLyBBbHJlYWR5IGV4aXN0ZWQ7XHJcbiAgICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gaW5kaWNlcy5sZW5ndGggKiAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShpbmRpY2VzLmxlbmd0aCAqIDMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiB0aGlzLnZlcnRleENvdW50IC8gMyk7KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzID8gaW5kaWNlc1tpKytdIDogKGkgKiAzICsgaik7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpaSAqIDMgKyBqXSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IHRyYW5zZm9ybSB0byBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHZhciB0YW5nZW50cyA9IGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZTtcclxuXHJcbiAgICAgICAgbWF0cml4ID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIE5vcm1hbCBNYXRyaXhcclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZlYzNUcmFuc2Zvcm1NYXQ0ID0gdmVjMy50cmFuc2Zvcm1NYXQ0O1xyXG4gICAgICAgIHZhciB2ZWMzRm9yRWFjaCA9IHZlYzMuZm9yRWFjaDtcclxuICAgICAgICB2ZWMzRm9yRWFjaChwb3NpdGlvbnMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBtYXRyaXgpO1xyXG4gICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKG5vcm1hbHMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhbmdlbnRzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKHRhbmdlbnRzLCA0LCAwLCBudWxsLCB2ZWMzVHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnZW9tZXRyeSBkYXRhIGluIEdMIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIGlmIChjaHVua3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaHVua3MubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1tjXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlicyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnNba107XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnMuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsuaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihjaHVuay5pbmRpY2VzQnVmZmVyLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFvRXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbyA9IHRoaXMuX192YW9DYWNoZVtpZF0udmFvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhb0V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX192YW9DYWNoZSA9IHt9O1xyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbkdlb21ldHJ5LlNUQVRJQ19EUkFXID0gR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeS5EWU5BTUlDX0RSQVcgPSBHZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXO1xyXG5HZW9tZXRyeS5TVFJFQU1fRFJBVyA9IEdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZUJ1ZmZlciA9IEdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5LkluZGljZXNCdWZmZXIgPSBHZW9tZXRyeUJhc2UuSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5O1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGxhbmVcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQud2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdpZHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGxhbmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGxhbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBoZWlnaHRTZWdtZW50cyA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgdmFyIHdpZHRoU2VnbWVudHMgPSB0aGlzLndpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8PSBoZWlnaHRTZWdtZW50czsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0ID0geSAvIGhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8PSB3aWR0aFNlZ21lbnRzOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBzID0geCAvIHdpZHRoU2VnbWVudHM7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goWzIgKiBzIC0gMSwgMiAqIHQgLSAxLCAwXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2goW3MsIHRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKFswLCAwLCAxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoU2VnbWVudHMgJiYgeSA8IGhlaWdodFNlZ21lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB4ICsgeSAqICh3aWR0aFNlZ21lbnRzICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW2kgKyB3aWR0aFNlZ21lbnRzICsgMSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMubm9ybWFsLmZyb21BcnJheShub3JtYWxzKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0SW5kaWNlc0Zyb21BcnJheShmYWNlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLTEsIC0xLCAwKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBwbGFuZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuZGVwdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0Lmluc2lkZV1cclxuICovXHJcbnZhciBDdWJlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKipAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRlcHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnNpZGU6IGZhbHNlXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3ViZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjdWJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHtcclxuICAgICAgICAgICAgJ3B4JzogY3JlYXRlUGxhbmUoJ3B4JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ254JzogY3JlYXRlUGxhbmUoJ254JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B5JzogY3JlYXRlUGxhbmUoJ3B5JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmRlcHRoU2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbnknOiBjcmVhdGVQbGFuZSgnbnknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdweic6IGNyZWF0ZVBsYW5lKCdweicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueic6IGNyZWF0ZVBsYW5lKCdueicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJMaXN0ID0gWydwb3NpdGlvbicsICd0ZXhjb29yZDAnLCAnbm9ybWFsJ107XHJcbiAgICAgICAgdmFyIHZlcnRleE51bWJlciA9IDA7XHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmVydGV4TnVtYmVyICs9IHBsYW5lc1twb3NdLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmYWNlTnVtYmVyICs9IHBsYW5lc1twb3NdLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTGlzdFtrXV0uaW5pdCh2ZXJ0ZXhOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGZhY2VOdW1iZXIpO1xyXG4gICAgICAgIHZhciBmYWNlT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdmVydGV4T2Zmc2V0ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBwb3MgaW4gcGxhbmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBwbGFuZSA9IHBsYW5lc1twb3NdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyQXJyYXkgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyU2l6ZSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNOb3JtYWwgPSBhdHRyTmFtZSA9PT0gJ25vcm1hbCc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnNpZGUgJiYgaXNOb3JtYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTmFtZV0udmFsdWVbaSArIGF0dHJTaXplICogdmVydGV4T2Zmc2V0XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBwbGFuZS5pbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFuZS5pbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGljZXNbaSArIGZhY2VPZmZzZXRdID0gdmVydGV4T2Zmc2V0ICsgcGxhbmUuaW5kaWNlc1t0aGlzLmluc2lkZSA/IChsZW4gLSBpIC0gMSkgOiBpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmYWNlT2Zmc2V0ICs9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQgKz0gcGxhbmUudmVydGV4Q291bnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KDEsIDEsIDEpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIC0xKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQbGFuZShwb3MsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzKSB7XHJcblxyXG4gICAgcGxhbmVNYXRyaXguaWRlbnRpdHkoKTtcclxuXHJcbiAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoe1xyXG4gICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXHJcbiAgICAgICAgaGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzXHJcbiAgICB9KTtcclxuXHJcbiAgICBzd2l0Y2gocG9zKSB7XHJcbiAgICAgICAgY2FzZSAncHgnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbngnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCAtTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVYKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbnonOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHBsYW5lLmFwcGx5VHJhbnNmb3JtKHBsYW5lTWF0cml4KTtcclxuICAgIHJldHVybiBwbGFuZTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3ViZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0U2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpTGVuZ3RoXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzXVxyXG4gKi9cclxudmFyIFNwaGVyZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogNDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwaGlMZW5ndGg6IE1hdGguUEkgKiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFTdGFydDogMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFMZW5ndGg6IE1hdGguUEksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDFcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIHNwaGVyZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhDb3VudCA9ICh3aWR0aFNlZ21lbnRzICsgMSkgKiAoaGVpZ2h0U2VnbWVudHMgKyAxKTtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQodmVydGV4Q291bnQpO1xyXG4gICAgICAgIG5vcm1hbEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleENvdW50ID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcyA9IG5ldyBJbmRpY2VzQ3Rvcih3aWR0aFNlZ21lbnRzICogaGVpZ2h0U2VnbWVudHMgKiA2KTtcclxuXHJcbiAgICAgICAgdmFyIHgsIHksIHosXHJcbiAgICAgICAgICAgIHUsIHYsXHJcbiAgICAgICAgICAgIGksIGo7XHJcblxyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuICAgICAgICB2YXIgcGhpU3RhcnQgPSB0aGlzLnBoaVN0YXJ0O1xyXG4gICAgICAgIHZhciBwaGlMZW5ndGggPSB0aGlzLnBoaUxlbmd0aDtcclxuICAgICAgICB2YXIgdGhldGFTdGFydCA9IHRoaXMudGhldGFTdGFydDtcclxuICAgICAgICB2YXIgdGhldGFMZW5ndGggPSB0aGlzLnRoZXRhTGVuZ3RoO1xyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBkaXZpZGVyID0gMSAvIHJhZGl1cztcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDw9IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgdSA9IGkgLyB3aWR0aFNlZ21lbnRzO1xyXG4gICAgICAgICAgICAgICAgdiA9IGogLyBoZWlnaHRTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBYIGF4aXMgaXMgaW52ZXJ0ZWQgc28gdGV4dHVyZSBjYW4gYmUgbWFwcGVkIGZyb20gbGVmdCB0byByaWdodFxyXG4gICAgICAgICAgICAgICAgeCA9IC1yYWRpdXMgKiBNYXRoLmNvcyhwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB5ID0gcmFkaXVzICogTWF0aC5jb3ModGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB6ID0gcmFkaXVzICogTWF0aC5zaW4ocGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoKSAqIE1hdGguc2luKHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHg7IHBvc1sxXSA9IHk7IHBvc1syXSA9IHo7XHJcbiAgICAgICAgICAgICAgICB1dlswXSA9IHU7IHV2WzFdID0gdjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRBdHRyLnNldChvZmZzZXQsIHV2KTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIG5vcm1hbEF0dHIuc2V0KG9mZnNldCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTEsIGkyLCBpMywgaTQ7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB3aWR0aFNlZ21lbnRzICsgMTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHRTZWdtZW50czsgaiArKykge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaTIgPSBqICogbGVuICsgaTtcclxuICAgICAgICAgICAgICAgIGkxID0gKGogKiBsZW4gKyBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICBpNCA9IChqICsgMSkgKiBsZW4gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIGkzID0gKGogKyAxKSAqIGxlbiArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldChyYWRpdXMsIHJhZGl1cywgcmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXJhZGl1cywgLXJhZGl1cywgLXJhZGl1cyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZ2VuZXJhdG9yXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKi9cclxudmFyIFBhcmFtZXRyaWNTdXJmYWNlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0b3I6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGFyYW1ldHJpYyBzdXJmYWNlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xyXG5cclxuICAgICAgICBpZiAoIWdlbmVyYXRvciB8fCAhZ2VuZXJhdG9yLnggfHwgIWdlbmVyYXRvci55IHx8ICFnZW5lcmF0b3Iueikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4RnVuYyA9IGdlbmVyYXRvci54O1xyXG4gICAgICAgIHZhciB5RnVuYyA9IGdlbmVyYXRvci55O1xyXG4gICAgICAgIHZhciB6RnVuYyA9IGdlbmVyYXRvci56O1xyXG4gICAgICAgIHZhciB1UmFuZ2UgPSBnZW5lcmF0b3IudSB8fCBbMCwgMSwgMC4wNV07XHJcbiAgICAgICAgdmFyIHZSYW5nZSA9IGdlbmVyYXRvci52IHx8IFswLCAxLCAwLjA1XTtcclxuXHJcbiAgICAgICAgdmFyIHVOdW0gPSBNYXRoLmZsb29yKCh1UmFuZ2VbMV0gLSB1UmFuZ2VbMF0gKyB1UmFuZ2VbMl0pIC8gdVJhbmdlWzJdKTtcclxuICAgICAgICB2YXIgdk51bSA9IE1hdGguZmxvb3IoKHZSYW5nZVsxXSAtIHZSYW5nZVswXSArIHZSYW5nZVsyXSkgLyB2UmFuZ2VbMl0pO1xyXG5cclxuICAgICAgICBpZiAoIWlzRmluaXRlKHVOdW0pIHx8ICFpc0Zpbml0ZSh2TnVtKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZmluaXRlIGdlbmVyYXRvcicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE51bSA9IHVOdW0gKiB2TnVtO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KHZlcnRleE51bSk7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KHZlcnRleE51bSk7XHJcblxyXG4gICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmQgPSBbXTtcclxuICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtOyBqKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1TnVtOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gaSAqIHVSYW5nZVsyXSArIHVSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAqIHZSYW5nZVsyXSArIHZSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHhGdW5jKHUsIHYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdID0geUZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gPSB6RnVuYyh1LCB2KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFswXSA9IGkgLyAodU51bSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRbMV0gPSBqIC8gKHZOdW0gLSAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uc2V0KG5WZXJ0ZXgsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnNldChuVmVydGV4LCB0ZXhjb29yZCk7XHJcbiAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleE51bSA+IDB4ZmZmZiA/IFVpbnQzMkFycmF5IDogVWludDE2QXJyYXk7XHJcbiAgICAgICAgdmFyIG5JbmRpY2VzID0gKHVOdW0gLSAxKSAqICh2TnVtIC0gMSkgKiA2O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKG5JbmRpY2VzKTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdk51bSAtIDE7IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW0gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMiA9IGogKiB1TnVtICsgaTtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IChqICogdU51bSArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIHZhciBpNCA9IChqICsgMSkgKiB1TnVtICsgaSArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSAoaiArIDEpICogdU51bSArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFyYW1ldHJpY1N1cmZhY2U7XHJcbiIsIi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgdGV4dHVyZXMgbGlrZSBjb21wcmVzc2VkIHRleHR1cmUsIHRleHR1cmUyZCwgdGV4dHVyZWN1YmVcclxuICogVE9ETyBtYXBwaW5nXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgVGV4dHVyZSA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdpZHRoLCByZWFkb25seSB3aGVuIHRoZSB0ZXh0dXJlIHNvdXJjZSBpcyBpbWFnZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4dHVyZSBoZWlnaHQsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4ZWwgZGF0YSB0eXBlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9CWVRFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5IQUxGX0ZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5GTE9BVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0x9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0lOVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHR5cGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtYXQgb2YgdGV4ZWwgZGF0YVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SR0JBfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9DT01QT05FTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX1NURU5DSUx9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBTOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBUOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWFnRmlsdGVyOiBnbGVudW0uTElORUFSLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBlbmFibGUgbWltYXAuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5pc290cm9waWMgZmlsdGVyaW5nLCBlbmFibGVkIGlmIHZhbHVlIGlzIGxhcmdlciB0aGFuIDFcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYW5pc290cm9waWM6IDEsXHJcbiAgICAvLyBwaXhlbFN0b3JlaSBwYXJhbWV0ZXJzLCBub3QgYXZhaWxhYmxlIHdoZW4gdGV4dHVyZSBpcyB1c2VkIGFzIHJlbmRlciB0YXJnZXRcclxuICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sXHJcbiAgICAvKipcclxuICAgICAqIElmIGZsaXAgaW4geSBheGlzIGZvciBnaXZlbiBpbWFnZSBzb3VyY2VcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBmbGlwWTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZmxhZyB0byBpbmRpY2F0ZSBpZiB0ZXh0dXJlIHNvdXJjZSBpcyBzUkdCXHJcbiAgICAgKi9cclxuICAgIHNSR0I6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCA0XHJcbiAgICAgKi9cclxuICAgIHVucGFja0FsaWdubWVudDogNCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIER5bmFtaWMgb3B0aW9uIGZvciB0ZXh0dXJlIGxpa2UgdmlkZW9cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuXHJcbiAgICBOUE9UOiBmYWxzZSxcclxuXHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICBfX3VzZWQ6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5UZXh0dXJlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgZ2V0V2ViR0xUZXh0dXJlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcygnd2ViZ2xfdGV4dHVyZScpKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGEgbmV3IGdsIGNvbnRleHQsIGNyZWF0ZSBuZXcgdGV4dHVyZSBhbmQgc2V0IGRpcnR5IHRydWVcclxuICAgICAgICAgICAgY2FjaGUucHV0KCd3ZWJnbF90ZXh0dXJlJywgX2dsLmNyZWF0ZVRleHR1cmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYWNoZS5pc0RpcnR5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIHVuYmluZDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRleHR1cmUgaXMgZGlydHkgYW5kIHVwZGF0ZSBpbiB0aGUgbmV4dCBmcmFtZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWNoZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHt9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgY29tbW9uIHBhcmFtZXRlcnMgb2YgdGV4dHVyZVxyXG4gICAgdXBkYXRlQ29tbW9uOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19BTElHTk1FTlQsIHRoaXMudW5wYWNrQWxpZ25tZW50KTtcclxuXHJcbiAgICAgICAgLy8gVXNlIG9mIG5vbmUtcG93ZXIgb2YgdHdvIHRleHR1cmVcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3dlYmdsL3dpa2kvV2ViR0xfYW5kX09wZW5HTF9EaWZmZXJlbmNlc1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNSR0JFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3NSR0InKTtcclxuICAgICAgICAvLyBGYWxsYmFja1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCX0FMUEhBICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0JBO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5OUE9UID0gIXRoaXMuaXNQb3dlck9mVHdvKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEF2YWlsYWJsZVdyYXBTOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBTO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZVdyYXBUOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBUO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1pbkZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtaW5GaWx0ZXIgPSB0aGlzLm1pbkZpbHRlcjtcclxuICAgICAgICBpZiAodGhpcy5OUE9UIHx8ICF0aGlzLnVzZU1pcG1hcCkge1xyXG4gICAgICAgICAgICBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICAgICAgbWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1RcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1hZ0ZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hZ0ZpbHRlcjtcclxuICAgIH0sXHJcblxyXG4gICAgbmV4dEhpZ2hlc3RQb3dlck9mVHdvOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIC0teDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDMyOyBpIDw8PSAxKSB7XHJcbiAgICAgICAgICAgIHggPSB4IHwgeCA+PiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgICAgIGlmICh3ZWJnbFRleHR1cmUpe1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVUZXh0dXJlKHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiBpbWFnZSBvZiB0ZXh0dXJlIGlzIHZhbGlkIGFuZCBsb2FkZWQuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiB0ZXh0dXJlIHNpemUgaXMgcG93ZXIgb2YgdHdvXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qIERhdGFUeXBlICovXHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuQllURSA9IGdsZW51bS5CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuVU5TSUdORURfQllURSA9IGdsZW51bS5VTlNJR05FRF9CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU0hPUlQgPSBnbGVudW0uU0hPUlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9TSE9SVCA9IGdsZW51bS5VTlNJR05FRF9TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLklOVCA9IGdsZW51bS5JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlQgPSBnbGVudW0uVU5TSUdORURfSU5UO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuRkxPQVQgPSBnbGVudW0uRkxPQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5IQUxGX0ZMT0FUID0gMHg4RDYxO1xyXG5cclxuLyoqXHJcbiAqIFVOU0lHTkVEX0lOVF8yNF84X1dFQkdMIGZvciBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvblxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCA9IDM0MDQyO1xyXG5cclxuLyogUGl4ZWxGb3JtYXQgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCA9IGdsZW51bS5ERVBUSF9DT01QT05FTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMID0gZ2xlbnVtLkRFUFRIX1NURU5DSUw7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5BTFBIQSA9IGdsZW51bS5BTFBIQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQiA9IGdsZW51bS5SR0I7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5SR0JBID0gZ2xlbnVtLlJHQkE7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0UgPSBnbGVudW0uTFVNSU5BTkNFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTFVNSU5BTkNFX0FMUEhBID0gZ2xlbnVtLkxVTUlOQU5DRV9BTFBIQTtcclxuXHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0IgPSAweDhDNDA7XHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0JfQUxQSEEgPSAweDhDNDI7XHJcblxyXG4vKiBDb21wcmVzc2VkIFRleHR1cmUgKi9cclxuVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUID0gMHg4M0YwO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4M0YxO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzO1xyXG5cclxuLyogVGV4dHVyZU1hZ0ZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSID0gZ2xlbnVtLkxJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVNaW5GaWx0ZXIgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVI7XHJcblxyXG4vKiBUZXh0dXJlV3JhcE1vZGUgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJFUEVBVCA9IGdsZW51bS5SRVBFQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5DTEFNUF9UT19FREdFID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVQgPSBnbGVudW0uTUlSUk9SRURfUkVQRUFUO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XHJcbiIsInZhciBtYXRoVXRpbCA9IHt9O1xyXG5cclxubWF0aFV0aWwuaXNQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYgKHZhbHVlIC0gMSkpID09PSAwO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmV4dFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhbHVlIC0tO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDI7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA0O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gODtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDE2O1xyXG4gICAgdmFsdWUgKys7XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmVhcmVzdFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiBNYXRoLnBvdyggMiwgTWF0aC5yb3VuZCggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRoLkxOMiApICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXRoVXRpbDtcclxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mVHdvKHZhbCkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgucm91bmQoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKSk7XHJcbn1cclxuZnVuY3Rpb24gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGV4dHVyZSwgY2FudmFzKSB7XHJcbiAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgd2lkdGggPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLndpZHRoKTtcclxuICAgIHZhciBoZWlnaHQgPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLmhlaWdodCk7XHJcbiAgICBjYW52YXMgPSBjYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZHJhd0ltYWdlKHRleHR1cmUuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlMkRcclxuICogQGV4dGVuZHMgY2xheS5UZXh0dXJlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAuLi5cclxuICogICAgIHZhciBtYXQgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAqICAgICAgICAgc2hhZGVyOiBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5waG9uZycsICdkaWZmdXNlTWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGRpZmZ1c2VNYXAgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgIGRpZmZ1c2VNYXAubG9hZCgnYXNzZXRzL3RleHR1cmVzL2RpZmZ1c2UuanBnJyk7XHJcbiAqICAgICBtYXQuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGRpZmZ1c2VNYXAuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGRpZmZ1c2UgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlMkQgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUyRCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIG1hcmsgZGlydHkgd2hlbiBhc3NpZ25lZC5cclxuICAgICAgICBpbWFnZTogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlIGlzIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7P1VpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiAgICAgW3tcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAwLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIHtcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAxLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIC4uLi5dXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb252ZXJ0VG9QT1Q6IGZhbHNlXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlMkQnLFxyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRvIHBvdCBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIGltYWdlL2NhbnZhcy92aWRlbyBlbGVtZW50LlxyXG4gICAgICAgIHZhciBjb252ZXJ0VG9QT1QgPSAhISh0aGlzLmNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICAmJiAhdGhpcy5taXBtYXBzLmxlbmd0aCAmJiB0aGlzLmltYWdlXHJcbiAgICAgICAgICAgICYmICh0aGlzLndyYXBTID09PSBUZXh0dXJlLlJFUEVBVCB8fCB0aGlzLndyYXBUID09PSBUZXh0dXJlLlJFUEVBVClcclxuICAgICAgICAgICAgJiYgdGhpcy5OUE9UXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfUywgY29udmVydFRvUE9UID8gdGhpcy53cmFwUyA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFMoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfVCwgY29udmVydFRvUE9UID8gdGhpcy53cmFwVCA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1hZ0ZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWFnRmlsdGVyKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1pbkZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFXzJELCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHdpZHRoIC89IDI7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgLz0gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCB0aGlzLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgY29udmVydFRvUE9UKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAoIXRoaXMuTlBPVCB8fCBjb252ZXJ0VG9QT1QpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICBpZiAoZGF0YS5pbWFnZSkge1xyXG4gICAgICAgICAgICB2YXIgaW1nRGF0YSA9IGRhdGEuaW1hZ2U7XHJcbiAgICAgICAgICAgIGlmIChjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvdENhbnZhcyA9IGNvbnZlcnRUZXh0dXJlVG9Qb3dlck9mVHdvKHRoaXMsIHRoaXMuX3BvdENhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBpbWdEYXRhID0gdGhpcy5fcG90Q2FudmFzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGltZ0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gQ2FuIGJlIHVzZWQgYXMgYSBibGFuayB0ZXh0dXJlIHdoZW4gd3JpdGluZyByZW5kZXIgdG8gdGV4dHVyZShSVFQpXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGdsRm9ybWF0IDw9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFRcclxuICAgICAgICAgICAgICAgICYmIGdsRm9ybWF0ID49IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5jb21wcmVzc2VkVGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwsIGdsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBkYXRhLnBpeGVscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJcyBhIHJlbmRlciB0YXJnZXQgaWYgcGl4ZWxzIGlzIG51bGxcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVGV4dHVyZTJELnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKSAmJiBpc1Bvd2VyT2ZUd28odGhpcy5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aCA+IDAgJiYgdGhpcy5pbWFnZS5oZWlnaHQgPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKHNyYywgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTJEO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBtYXRoVXRpbCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbnZhciBpc1Bvd2VyT2ZUd28gPSBtYXRoVXRpbC5pc1Bvd2VyT2ZUd287XHJcblxyXG52YXIgdGFyZ2V0TGlzdCA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2Vudmlyb25tZW50TWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudk1hcCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBlbnZNYXAubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICBtYXQuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGVudk1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgc2t5IHRleHR1cmUgbG9hZGVkXHJcbiAqICAgICAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICogICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIH0pO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgVGV4dHVyZUN1YmUgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmVDdWJlIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIGN1YmVtYXAgc2hvdWxkIG5vdCBmbGlwWSBpbiBkZWZhdWx0LlxyXG4gICAgICAgIC8vIGZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG54XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBueVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB6XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnpcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbWFnZToge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YSBvZiBlYWNoIHNpZGUuIFdpbGwgYmUgaWdub3JlZCBpZiBpbWFnZXMgYXJlIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczoge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlQ3ViZScsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29tbW9uKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdmFyIGdsRm9ybWF0ID0gdGhpcy5mb3JtYXQ7XHJcbiAgICAgICAgdmFyIGdsVHlwZSA9IHRoaXMudHlwZTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX1dSQVBfUywgdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9ULCB0aGlzLmdldEF2YWlsYWJsZVdyYXBUKCkpO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5OUE9UICYmIHRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldExpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpbWcgPSBkYXRhLmltYWdlICYmIGRhdGEuaW1hZ2VbdGFyZ2V0XTtcclxuICAgICAgICAgICAgaWYgKGltZykge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzICYmIGRhdGEucGl4ZWxzW3RhcmdldF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlQ3ViZS5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAodGhpcy51c2VNaXBtYXAgJiYgIXRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgaXNQb3dlck9mVHdvIG1ldGhvZFxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHguaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc1Bvd2VyT2ZUd28odGhpcy53aWR0aClcclxuICAgICAgICAgICAgICAgICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubngpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB5KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueSlcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHopXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm56KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhISh0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWQ6IGZ1bmN0aW9uIChpbWFnZUxpc3QsIGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB1dGlsLmVhY2goaW1hZ2VMaXN0LCBmdW5jdGlvbiAoc3JjLCB0YXJnZXQpe1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICAgICAgaWYgKGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcgLS07XHJcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlW3RhcmdldF0gPSBpbWFnZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCB3aWR0aCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dpZHRoICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UucHguaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCBoZWlnaHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuZnVuY3Rpb24gaXNJbWFnZVJlbmRlcmFibGUoaW1hZ2UpIHtcclxuICAgIHJldHVybiBpbWFnZS53aWR0aCA+IDAgJiYgaW1hZ2UuaGVpZ2h0ID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZUN1YmU7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgUmVuZGVyYWJsZSA9IE5vZGUuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5SZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lkdlb21ldHJ5fVxyXG4gICAgICovXHJcbiAgICBnZW9tZXRyeTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1vZGU6IGdsZW51bS5UUklBTkdMRVMsXHJcblxyXG4gICAgX3JlbmRlckluZm86IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBfX3Byb2dyYW06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHcm91cCBvZiByZWNlaXZlZCBsaWdodC5cclxuICAgICAqL1xyXG4gICAgbGlnaHRHcm91cDogMCxcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIG9yZGVyLCBOb2RlcyB3aXRoIHNtYWxsZXIgdmFsdWUgcmVuZGVycyBiZWZvcmUgbm9kZXMgd2l0aCBsYXJnZXIgdmFsdWVzLlxyXG4gICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmVuZGVyT3JkZXI6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gbW9kZSBpcyBMSU5FUywgTElORV9TVFJJUCBvciBMSU5FX0xPT1BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIGxpbmVXaWR0aDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBjdWxsaW5nXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgY3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIG9mIHBvbHlnb24gd2lsbCBiZSBjdWxsZWQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkJBQ0t9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDS31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9jdWxsRmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3VsbEZhY2U6IGdsZW51bS5CQUNLLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgaXMgZnJvbnQgZmFjZS5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ1d9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkNDV31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9mcm9udEZhY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZyb250RmFjZTogZ2xlbnVtLkNDVyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBzb2Z0d2FyZSBmcnVzdHVtIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHJlY2VpdmVTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjYXN0U2hhZG93OiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaWdub3JlUGlja2luZzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQcmVaOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVHQnVmZmVyOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVE9ETyBTaGFkZXIgP1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlb21ldHJ5ICYmIHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC5zaGFkZXIgJiYgIXRoaXMuaW52aXNpYmxlXHJcbiAgICAgICAgICAgICYmIHRoaXMuZ2VvbWV0cnkudmVydGV4Q291bnQgPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJlZm9yZSByZW5kZXIgaG9va1xyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBiZWZvcmVSZW5kZXI6IGZ1bmN0aW9uIChfZ2wpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAoX2dsLCByZW5kZXJTdGF0KSB7fSxcclxuXHJcbiAgICBnZXRCb3VuZGluZ0JveDogZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgb3V0ID0gTm9kZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3guY2FsbCh0aGlzLCBmaWx0ZXIsIG91dCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICBvdXQudW5pb24odGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHJlbmRlcmFibGVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5SZW5kZXJhYmxlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW1xyXG4gICAgICAgICAgICAnY2FzdFNoYWRvdycsICdyZWNlaXZlU2hhZG93JyxcclxuICAgICAgICAgICAgJ21vZGUnLCAnY3VsbGluZycsICdjdWxsRmFjZScsICdmcm9udEZhY2UnLFxyXG4gICAgICAgICAgICAnZnJ1c3R1bUN1bGxpbmcnLFxyXG4gICAgICAgICAgICAncmVuZGVyT3JkZXInLCAnbGluZVdpZHRoJyxcclxuICAgICAgICAgICAgJ2lnbm9yZVBpY2tpbmcnLCAnaWdub3JlUHJlWicsICdpZ25vcmVHQnVmZmVyJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSBub3QgdG8gb3ZlcndyaXRlIHRoZSBwcm90b3R5cGUgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlW25hbWVdICE9PSB0aGlzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZVtuYW1lXSA9IHRoaXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQkFDSyA9IGdsZW51bS5CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkNXID0gZ2xlbnVtLkNXO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlbmRlcmFibGU7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWVzaFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlJlbmRlcmFibGVcclxuICovXHJcbnZhciBNZXNoID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5Lk1lc2gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB3aGVuIGl0IGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ta2VsZXRvbn1cclxuICAgICAqL1xyXG4gICAgc2tlbGV0b246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEpvaW50cyBpbmRpY2VzIE1lc2hlcyBjYW4gc2hhcmUgdGhlIG9uZSBza2VsZXRvbiBpbnN0YW5jZSBhbmQgZWFjaCBtZXNoIGNhbiB1c2Ugb25lIHBhcnQgb2Ygam9pbnRzLiBKb2ludHMgaW5kaWNlcyBpbmRpY2F0ZSB0aGUgaW5kZXggb2Ygam9pbnQgaW4gdGhlIHNrZWxldG9uIGluc3RhbmNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgKi9cclxuICAgIGpvaW50czogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHN0b3JlIHRoZSBza2luIG1hdHJpY2VzIGluIHZlcnRleCB0ZXh0dXJlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbH1cclxuICAgICAqL1xyXG4gICAgdXNlU2tpbk1hdHJpY2VzVGV4dHVyZTogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5qb2ludHMpIHtcclxuICAgICAgICB0aGlzLmpvaW50cyA9IFtdO1xyXG4gICAgfVxyXG59LCB7XHJcblxyXG4gICAgaXNTa2lubmVkTWVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhISh0aGlzLnNrZWxldG9uICYmIHRoaXMuam9pbnRzICYmIHRoaXMuam9pbnRzLmxlbmd0aCA+IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtZXNoID0gUmVuZGVyYWJsZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBtZXNoLnNrZWxldG9uID0gdGhpcy5za2VsZXRvbjtcclxuICAgICAgICBpZiAodGhpcy5qb2ludHMpIHtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSB0aGlzLmpvaW50cy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vLyBFbnVtc1xyXG5NZXNoLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbk1lc2guTElORVMgPSBnbGVudW0uTElORVM7XHJcbk1lc2guTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuTWVzaC5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbk1lc2guVFJJQU5HTEVTID0gZ2xlbnVtLlRSSUFOR0xFUztcclxuTWVzaC5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG5cclxuTWVzaC5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbk1lc2guRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbk1lc2guRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XHJcbk1lc2guQ1cgPSBnbGVudW0uQ1c7XHJcbk1lc2guQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc2g7XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSAnLi4vQ2FtZXJhJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmVcclxuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcclxuICovXHJcbnZhciBQZXJzcGVjdGl2ZSA9IENhbWVyYS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gZGVncmVlc1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZm92OiA1MCxcclxuICAgIC8qKlxyXG4gICAgICogQXNwZWN0IHJhdGlvLCB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGggLyBoZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFzcGVjdDogMSxcclxuICAgIC8qKlxyXG4gICAgICogTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogMC4xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMjAwMFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJhZCA9IHRoaXMuZm92IC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgucGVyc3BlY3RpdmUocmFkLCB0aGlzLmFzcGVjdCwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XHJcbiAgICB9LFxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciByYWQgPSBNYXRoLmF0YW4oMSAvIG1bNV0pICogMjtcclxuICAgICAgICB0aGlzLmZvdiA9IHJhZCAvIE1hdGguUEkgKiAxODA7XHJcbiAgICAgICAgdGhpcy5hc3BlY3QgPSBtWzVdIC8gbVswXTtcclxuICAgICAgICB0aGlzLm5lYXIgPSBtWzE0XSAvIChtWzEwXSAtIDEpO1xyXG4gICAgICAgIHRoaXMuZmFyID0gbVsxNF0gLyAobVsxMF0gKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLlBlcnNwZWN0aXZlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IENhbWVyYS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gdGhpcy5mb3Y7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMuYXNwZWN0O1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQZXJzcGVjdGl2ZTtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY1xyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIE9ydGhvZ3JhcGhpYyA9IENhbWVyYS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlZnQ6IC0xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByaWdodDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3R0b206IC0xXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm9ydGhvKHRoaXMubGVmdCwgdGhpcy5yaWdodCwgdGhpcy5ib3R0b20sIHRoaXMudG9wLCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHRoaXMubGVmdCA9ICgtMSAtIG1bMTJdKSAvIG1bMF07XHJcbiAgICAgICAgdGhpcy5yaWdodCA9ICgxIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnRvcCA9ICgxIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLmJvdHRvbSA9ICgtMSAtIG1bMTNdKSAvIG1bNV07XHJcbiAgICAgICAgdGhpcy5uZWFyID0gLSgtMSAtIG1bMTRdKSAvIG1bMTBdO1xyXG4gICAgICAgIHRoaXMuZmFyID0gLSgxIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5sZWZ0ID0gdGhpcy5sZWZ0O1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IHRoaXMucmlnaHQ7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSB0aGlzLnRvcDtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gdGhpcy5ib3R0b207XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3J0aG9ncmFwaGljO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmIGRlZmluZWQoUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRCkgfHwgZGVmaW5lZChOT1JNQUxNQVBfRU5BQkxFRClcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChBT01BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkMjtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X3NoX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9jdWJlbWFwX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5wb2ludF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuZGlyZWN0aW9uYWxfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgU1BPVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuc3BvdF9saWdodFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBzdGFuZGFyZFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQyIDogVEVYQ09PUkRfMTtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsudmFyeWluZ1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiB2ZWMzIHNraW5uZWRUYW5nZW50ID0gdGFuZ2VudC54eXo7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiB2X1RhbmdlbnQgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZFRhbmdlbnQsIDAuMCkpLnh5eik7XFxuIHZfQml0YW5nZW50ID0gbm9ybWFsaXplKGNyb3NzKHZfTm9ybWFsLCB2X1RhbmdlbnQpICogdGFuZ2VudC53KTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuIHZfVGV4Y29vcmQyID0gdGV4Y29vcmQyO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5XFxuI2RlZmluZSBHTE9TU0lORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgUk9VR0hORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgTUVUQUxORVNTX0NIQU5ORUwgMVxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxuI2lmZGVmIE5PUk1BTE1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbm9ybWFsU2NhbGU6IDEuMDtcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MgOiAwLjU7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4gI2VuZGlmXFxuI2Vsc2VcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M6IDAuNTtcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdsb3NzaW5lc3NNYXA7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBvY2NsdXNpb25NYXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWluO1xcbnVuaWZvcm0gdmVjMyBlbnZpcm9ubWVudEJveE1heDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIEJSREZMT09LVVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVNSVNTSVZFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3Nhb01hcDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQgOiBWSUVXUE9SVDtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xcbnVuaWZvcm0gZmxvYXQgYW9JbnRlbnNpdHk7XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcyA6IDAuMDtcXG4jZWxzZVxcbnVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yIDogWzAuMSwgMC4xLCAwLjFdO1xcbiNlbmRpZlxcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGVtaXNzaW9uSW50ZW5zaXR5OiAxO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxudW5pZm9ybSBmbG9hdCBtYXhNaXBtYXBMZXZlbDogNTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsubGlnaHRfaGVhZGVyXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuQGltcG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG5mbG9hdCBHX1NtaXRoKGZsb2F0IGcsIGZsb2F0IG5kdiwgZmxvYXQgbmRsKVxcbntcXG4gZmxvYXQgcm91Z2huZXNzID0gMS4wIC0gZztcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gbmR2IC8gKG5kdiAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBuZGwgLyAobmRsICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxuZmxvYXQgRF9QaG9uZyhmbG9hdCBnLCBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKFBJICogdG1wICogdG1wKTtcXG59XFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4T2NjbHVzaW9uU2NhbGUgOiAwLjAyO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNYXhMYXllcnMgOiAyMDtcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4TWluTGF5ZXJzIDogNTtcXG51bmlmb3JtIHNhbXBsZXIyRCBwYXJhbGxheE9jY2x1c2lvbk1hcDtcXG5tYXQzIHRyYW5zcG9zZShpbiBtYXQzIGluTWF0KVxcbntcXG4gdmVjMyBpMCA9IGluTWF0WzBdO1xcbiB2ZWMzIGkxID0gaW5NYXRbMV07XFxuIHZlYzMgaTIgPSBpbk1hdFsyXTtcXG4gcmV0dXJuIG1hdDMoXFxuIHZlYzMoaTAueCwgaTEueCwgaTIueCksXFxuIHZlYzMoaTAueSwgaTEueSwgaTIueSksXFxuIHZlYzMoaTAueiwgaTEueiwgaTIueilcXG4gKTtcXG59XFxudmVjMiBwYXJhbGxheFV2KHZlYzIgdXYsIHZlYzMgdmlld0RpcilcXG57XFxuIGZsb2F0IG51bUxheWVycyA9IG1peChwYXJhbGxheE1heExheWVycywgcGFyYWxsYXhNaW5MYXllcnMsIGFicyhkb3QodmVjMygwLjAsIDAuMCwgMS4wKSwgdmlld0RpcikpKTtcXG4gZmxvYXQgbGF5ZXJIZWlnaHQgPSAxLjAgLyBudW1MYXllcnM7XFxuIGZsb2F0IGN1ckxheWVySGVpZ2h0ID0gMC4wO1xcbiB2ZWMyIGRlbHRhVXYgPSB2aWV3RGlyLnh5ICogcGFyYWxsYXhPY2NsdXNpb25TY2FsZSAvICh2aWV3RGlyLnogKiBudW1MYXllcnMpO1xcbiB2ZWMyIGN1clV2ID0gdXY7XFxuIGZsb2F0IGhlaWdodCA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgY3VyVXYpLnI7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgMzA7IGkrKykge1xcbiBjdXJMYXllckhlaWdodCArPSBsYXllckhlaWdodDtcXG4gY3VyVXYgLT0gZGVsdGFVdjtcXG4gaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gaWYgKGhlaWdodCA8IGN1ckxheWVySGVpZ2h0KSB7XFxuIGJyZWFrO1xcbiB9XFxuIH1cXG4gdmVjMiBwcmV2VXYgPSBjdXJVdiArIGRlbHRhVXY7XFxuIGZsb2F0IG5leHQgPSBoZWlnaHQgLSBjdXJMYXllckhlaWdodDtcXG4gZmxvYXQgcHJldiA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgcHJldlV2KS5yIC0gY3VyTGF5ZXJIZWlnaHQgKyBsYXllckhlaWdodDtcXG4gcmV0dXJuIG1peChjdXJVdiwgcHJldlV2LCBuZXh0IC8gKG5leHQgLSBwcmV2KSk7XFxufVxcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBhbGJlZG9Db2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGFsYmVkb0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGFsYmVkb0NvbG9yID0gc1JHQlRvTGluZWFyKGFsYmVkb0NvbG9yKTtcXG4jZW5kaWZcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3MgLSB2X1dvcmxkUG9zaXRpb24pO1xcbiB2ZWMyIHV2ID0gdl9UZXhjb29yZDtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIHV2ID0gcGFyYWxsYXhVdih2X1RleGNvb3JkLCBub3JtYWxpemUodHJhbnNwb3NlKHRibikgKiAtVikpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB1dik7XFxuICNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuICNlbmRpZlxcbiBhbGJlZG9Db2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiAjaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiBhbGJlZG9Db2xvci5hICo9IHRleGVsLmE7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUVUQUxORVNTXFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBtMiA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHV2KVtNRVRBTE5FU1NfQ0hBTk5FTF07XFxuIG0gPSBjbGFtcChtMiArIChtIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4gdmVjMyBiYXNlQ29sb3IgPSBhbGJlZG9Db2xvci5yZ2I7XFxuIGFsYmVkb0NvbG9yLnJnYiA9IGJhc2VDb2xvciAqICgxLjAgLSBtKTtcXG4gdmVjMyBzcGVjID0gbWl4KHZlYzMoMC4wNCksIGJhc2VDb2xvciwgbSk7XFxuI2Vsc2VcXG4gdmVjMyBzcGVjID0gc3BlY3VsYXJDb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1JPVUdITkVTU1xcbiBmbG9hdCBnID0gY2xhbXAoMS4wIC0gcm91Z2huZXNzLCAwLjAsIDEuMCk7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IDEuMCAtIHRleHR1cmUyRChyb3VnaG5lc3NNYXAsIHV2KVtST1VHSE5FU1NfQ0hBTk5FTF07XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4jZWxzZVxcbiBmbG9hdCBnID0gZ2xvc3NpbmVzcztcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IHRleHR1cmUyRChnbG9zc2luZXNzTWFwLCB1dilbR0xPU1NJTkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxuIHNwZWMgKj0gc1JHQlRvTGluZWFyKHRleHR1cmUyRChzcGVjdWxhck1hcCwgdXYpKS5yZ2I7XFxuI2VuZGlmXFxuIHZlYzMgTiA9IHZfTm9ybWFsO1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG4gaWYgKGRvdChOLCBWKSA8IDAuMCkge1xcbiBOID0gLU47XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHV2KS54eXo7XFxuIGlmIChkb3Qobm9ybWFsVGV4ZWwsIG5vcm1hbFRleGVsKSA+IDAuMCkgeyBOID0gKG5vcm1hbFRleGVsICogMi4wIC0gMS4wKTtcXG4gTiA9IG5vcm1hbGl6ZShOICogdmVjMyhub3JtYWxTY2FsZSwgbm9ybWFsU2NhbGUsIDEuMCkpO1xcbiB0Ym5bMV0gPSAtdGJuWzFdO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBkaWZmdXNlVGVybSA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuIHZlYzMgc3BlY3VsYXJUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIHZlYzMgZnJlc25lbFRlcm0gPSBGX1NjaGxpY2sobmR2LCBzcGVjKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZVRlcm0gKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCBOKSAqIGFtYmllbnRTSExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNQb2ludFtQT0lOVF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gdmVjMyBsYyA9IHBvaW50TGlnaHRDb2xvcltfaWR4X107XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW19pZHhfXTtcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1BvaW50W19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuIGRpZmZ1c2VUZXJtICs9IGxpO1xcbiBzcGVjdWxhclRlcm0gKz0gbGkgKiBmcmVzbmVsVGVybSAqIERfUGhvbmcoZywgbmRoKTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzRGlyW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzRGlyKTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW19pZHhfXSk7XFxuIHZlYzMgbGMgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogbmRsICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IHNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoc3BvdExpZ2h0RGlyZWN0aW9uW2ldKTtcXG4gdmVjMyBsYyA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiBmbG9hdCByYW5nZSA9IHNwb3RMaWdodFJhbmdlW2ldO1xcbiBmbG9hdCBhID0gc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGZhbGxvZmZGYWN0b3IgPSBzcG90TGlnaHRGYWxsb2ZmRmFjdG9yW2ldO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBMKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyhiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiAoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNTcG90W2ldO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIGF0dGVudWF0aW9uICogKDEuMCAtIGZhbGxvZmYpICogc2hhZG93Q29udHJpYiAqIG5kbDtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzQgb3V0Q29sb3IgPSBhbGJlZG9Db2xvcjtcXG4gb3V0Q29sb3IucmdiICo9IG1heChkaWZmdXNlVGVybSwgdmVjMygwLjApKTtcXG4gb3V0Q29sb3IucmdiICs9IG1heChzcGVjdWxhclRlcm0sIHZlYzMoMC4wKSk7XFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gZmxvYXQgcm91Z2gyID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzMiA9IHJvdWdoMiAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0yID0gdGV4dHVyZTJEKGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwWzBdLCB2ZWMyKHJvdWdoMiwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0MiA9IHNwZWMgKiBicmRmUGFyYW0yLnggKyBicmRmUGFyYW0yLnk7XFxuIHZlYzMgZW52VGV4ZWwyO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMLCBiaWFzMiksIDguMTIpO1xcbiAjZWxzZVxcbiBlbnZUZXhlbDIgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlKGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW19pZHhfXSwgTCksIDguMTIpO1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGFtYmllbnRDdWJlbWFwTGlnaHRDb2xvcltfaWR4X10gKiBlbnZUZXhlbDIgKiBlbnZXZWlnaHQyO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9FTkFCTEVEXFxuIHZlYzMgZW52V2VpZ2h0ID0gZyAqIGZyZXNuZWxUZXJtO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gI2lmZGVmIFBBUkFMTEFYX0NPUlJFQ1RFRFxcbiBMID0gcGFyYWxsYXhDb3JyZWN0KEwsIHZfV29ybGRQb3NpdGlvbiwgZW52aXJvbm1lbnRCb3hNaW4sIGVudmlyb25tZW50Qm94TWF4KTtcXG4jZW5kaWZcXG4gI2lmZGVmIEVOVklST05NRU5UTUFQX1BSRUZJTFRFUlxcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGcsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogbWF4TWlwbWFwTGV2ZWw7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmVMb2RFWFQoZW52aXJvbm1lbnRNYXAsIEwsIGJpYXMpKS5yZ2I7XFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2I7XFxuICNlbmRpZlxcbiAjaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxuIHZlYzIgYnJkZlBhcmFtID0gdGV4dHVyZTJEKGJyZGZMb29rdXAsIHZlYzIocm91Z2gsIG5kdikpLnh5O1xcbiBlbnZXZWlnaHQgPSBzcGVjICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gI2VuZGlmXFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSB0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkueHl6O1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGVudlRleGVsICogZW52V2VpZ2h0O1xcbiNlbmRpZlxcbiBmbG9hdCBhb0ZhY3RvciA9IDEuMDtcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKHRleHR1cmUyRChzc2FvTWFwLCAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuencpLnIsIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbiBhb0ZhY3RvciA9IG1pbigxLjAgLSBjbGFtcCgoMS4wIC0gdGV4dHVyZTJEKGFvTWFwLCB2X1RleGNvb3JkMikucikgKiBhb0ludGVuc2l0eSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuI2lmZGVmIE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQob2NjbHVzaW9uTWFwLCB2X1RleGNvb3JkKS5yKSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiAqPSBhb0ZhY3RvcjtcXG4gdmVjMyBsRW1pc3Npb24gPSBlbWlzc2lvbjtcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbiBsRW1pc3Npb24gKj0gdGV4dHVyZTJEKGVtaXNzaXZlTWFwLCB1dikucmdiO1xcbiNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gbEVtaXNzaW9uICogZW1pc3Npb25JbnRlbnNpdHk7XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKG91dENvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIG91dENvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhvdXRDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBvdXRDb2xvciA9IGxpbmVhclRvc1JHQihvdXRDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihvdXRDb2xvcik7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmRNUi52ZXJ0ZXhcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50XFxuI2RlZmluZSBVU0VfTUVUQUxORVNTXFxuI2RlZmluZSBVU0VfUk9VR0hORVNTXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcblxyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NoYWRlci9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuXHJcbi8vIEltcG9ydCBzdGFuZGFyZCBzaGFkZXJcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5cclxudmFyIFRFWFRVUkVfUFJPUEVSVElFUyA9IFsnZGlmZnVzZU1hcCcsICdub3JtYWxNYXAnLCAncm91Z2huZXNzTWFwJywgJ21ldGFsbmVzc01hcCcsICdlbWlzc2l2ZU1hcCcsICdlbnZpcm9ubWVudE1hcCcsICdicmRmTG9va3VwJywgJ3NzYW9NYXAnLCAnYW9NYXAnXTtcclxudmFyIFNJTVBMRV9QUk9QRVJUSUVTID0gWydjb2xvcicsICdlbWlzc2lvbicsICdlbWlzc2lvbkludGVuc2l0eScsICdhbHBoYScsICdyb3VnaG5lc3MnLCAnbWV0YWxuZXNzJywgJ3V2UmVwZWF0JywgJ3V2T2Zmc2V0JywgJ2FvSW50ZW5zaXR5JywgJ2FscGhhQ3V0b2ZmJywgJ25vcm1hbFNjYWxlJ107XHJcbnZhciBQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIgPSBbJ2xpbmVhcicsICdlbmNvZGVSR0JNJywgJ2RlY29kZVJHQk0nLCAnZG91YmxlU2lkZWQnLCAnYWxwaGFUZXN0JywgJ3JvdWdobmVzc0NoYW5uZWwnLCAnbWV0YWxuZXNzQ2hhbm5lbCcsICdlbnZpcm9ubWVudE1hcFByZWZpbHRlcmVkJ107XHJcblxyXG52YXIgTlVNX0RFRklORV9NQVAgPSB7XHJcbiAgICAncm91Z2huZXNzQ2hhbm5lbCc6ICdST1VHSE5FU1NfQ0hBTk5FTCcsXHJcbiAgICAnbWV0YWxuZXNzQ2hhbm5lbCc6ICdNRVRBTE5FU1NfQ0hBTk5FTCdcclxufTtcclxudmFyIEJPT0xfREVGSU5FX01BUCA9IHtcclxuICAgICdsaW5lYXInOiAnU1JHQl9ERUNPREUnLFxyXG4gICAgJ2VuY29kZVJHQk0nOiAnUkdCTV9FTkNPREUnLFxyXG4gICAgJ2RlY29kZVJHQk0nOiAnUkdCTV9ERUNPREUnLFxyXG4gICAgJ2RvdWJsZVNpZGVkJzogJ0RPVUJMRV9TSURFRCcsXHJcbiAgICAnYWxwaGFUZXN0JzogJ0FMUEhBX1RFU1QnLFxyXG4gICAgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnOiAnRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSJ1xyXG59O1xyXG5cclxuXHJcbnZhciBzdGFuZGFyZFNoYWRlcjtcclxuLyoqXHJcbiAqIFN0YW5kYXJkIG1hdGVyaWFsIHdpdGhvdXQgY3VzdG9tIHNoYWRlci5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU3RhbmRhcmRNYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkJhc2VcclxuICogQGV4YW1wbGVcclxuICogdmFyIG1hdCA9IG5ldyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gKiAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuICogICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VUZXh0dXJlXHJcbiAqIH0pO1xyXG4gKiBtYXQucm91Z2huZXNzID0gMTtcclxuICovXHJcbnZhciBTdGFuZGFyZE1hdGVyaWFsID0gTWF0ZXJpYWwuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghc3RhbmRhcmRTaGFkZXIpIHtcclxuICAgICAgICBzdGFuZGFyZFNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnQnKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwjICovIHtcclxuICAgICAgICBzaGFkZXI6IHN0YW5kYXJkU2hhZGVyXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRpb24pO1xyXG4gICAgLy8gRXh0ZW5kIGFmdGVyIHNoYWRlciBpcyBjcmVhdGVkLlxyXG4gICAgdXRpbC5kZWZhdWx0cyh0aGlzLCAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8gIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzEsIDEsIDFdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFswLCAwLCAwXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uOiBbMCwgMCwgMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdWdobmVzczogMC41LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3M6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYVRlc3Q6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDdXRvZmYgdGhyZXNob2xkIGZvciBhbHBoYSB0ZXN0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYUN1dG9mZjogMC45LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2FsYXIgbXVsdGlwbGllciBhcHBsaWVkIHRvIGVhY2ggbm9ybWFsIHZlY3RvciBvZiBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBjb25zaWRlcmVkIG9ubHkgaWYgYSBub3JtYWwgdGV4dHVyZSBpcyBzcGVjaWZpZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsU2NhbGU6IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gVE9ETyBNdXN0IGRpc2FibGUgY3VsbGluZy5cclxuICAgICAgICBkb3VibGVTaWRlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkaWZmdXNlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzTWFwOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbWlzc2l2ZU1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50Qm94OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJSREYgTG9va3VwIGlzIGdlbmVyYXRlZCBieSBjbGF5LnV0aWwuY3ViZW1hcC5pbnRlZ3JhdGVCcmRmXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJyZGZMb29rdXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzc2FvTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dlJlcGVhdDogWzEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXZPZmZzZXQ6IFswLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9JbnRlbnNpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUHJlZmlsdGVyZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsaW5lYXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVjb2RlUkdCTTogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzc0NoYW5uZWw6IDFcclxuICAgIH0pO1xyXG59LCB7XHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxbcHJvcE5hbWVdID0gdGhpc1twcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICBTSU1QTEVfUFJPUEVSVElFUy5jb25jYXQoUFJPUEVSVElFU19DSEFOR0VfU0hBREVSKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuU0lNUExFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgcHJvcE5hbWUsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHByb3BOYW1lKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShwcm9wTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcblRFWFRVUkVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuUFJPUEVSVElFU19DSEFOR0VfU0hBREVSLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICB2YXIgcHJpdmF0ZUtleSA9ICdfJyArIHByb3BOYW1lO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1twcml2YXRlS2V5XTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbcHJpdmF0ZUtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHByb3BOYW1lIGluIE5VTV9ERUZJTkVfTUFQKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lTmFtZSA9IE5VTV9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gQk9PTF9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID8gdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSkgOiB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAnZW52aXJvbm1lbnRCb3gnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW52Qm94ID0gdGhpcy5fZW52aXJvbm1lbnRCb3g7XHJcbiAgICAgICAgaWYgKGVudkJveCkge1xyXG4gICAgICAgICAgICBlbnZCb3gubWluLnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1pbicpKTtcclxuICAgICAgICAgICAgZW52Qm94Lm1heC5zZXRBcnJheSh0aGlzLmdldCgnZW52aXJvbm1lbnRCb3hNYXgnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbnZCb3g7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fZW52aXJvbm1lbnRCb3ggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMgfHwge307XHJcbiAgICAgICAgdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWluJ10gPSB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSB8fCB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNYXgnXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBUT0RPIENhbid0IGRldGVjdCBvcGVyYXRpb24gbGlrZSBib3gubWluID0gbmV3IFZlY3RvcigpXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNaW4nLCB2YWx1ZS5taW4uYXJyYXkpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50Qm94TWF4JywgdmFsdWUubWF4LmFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCAnUEFSQUxMQVhfQ09SUkVDVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3RhbmRhcmRNYXRlcmlhbDtcclxuIiwiaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIF9saWJyYXJ5ID0ge307XHJcblxyXG5mdW5jdGlvbiBTaGFkZXJMaWJyYXJ5ICgpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufVxyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgdmFyIGtleSA9IG5hbWU7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Bvb2xba2V5XSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb29sW2tleV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgc291cmNlID0gX2xpYnJhcnlbbmFtZV07XHJcbiAgICAgICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCInICsgJyBpcyBub3QgaW4gdGhlIGxpYnJhcnknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihzb3VyY2UudmVydGV4LCBzb3VyY2UuZnJhZ21lbnQpO1xyXG4gICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IHNoYWRlcjtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHRlbXBsYXRlKG5hbWUsIHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIF9saWJyYXJ5W25hbWVdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxufVxyXG5cclxudmFyIGRlZmF1bHRMaWJyYXJ5ID0gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuXHJcbi8qKlxyXG4gKiAjIyMgQnVpbGluIHNoYWRlcnNcclxuICogKyBjbGF5LnN0YW5kYXJkXHJcbiAqICsgY2xheS5iYXNpY1xyXG4gKiArIGNsYXkubGFtYmVydFxyXG4gKiArIGNsYXkud2lyZWZyYW1lXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgc2hhZGVyIGxpYnJhcnkuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUxpYnJhcnk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaGFkZXIgZnJvbSBkZWZhdWx0IGxpYnJhcnkuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICAgICBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5zdGFuZGFyZCcpXHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0TGlicmFyeS5nZXQuYXBwbHkoZGVmYXVsdExpYnJhcnksIGFyZ3VtZW50cyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHZlcnRleCAtIFZlcnRleCBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBmcmFnbWVudCAtIEZyYWdtZW50IHNoYWRlciBjb2RlXHJcbiAgICAgKi9cclxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmNsZWFyKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Kb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEpvaW50ID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5Kb2ludCMgKi9cclxue1xyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTMjaXNzdWVjb21tZW50LTI5MjE2NTc2XHJcbiAgICAvKipcclxuICAgICAqIEpvaW50IG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG5hbWU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGluZGV4OiAtMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgYXR0YWNoZWQgdG9cclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIG5vZGU6IG51bGxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBKb2ludDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi9Kb2ludCc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9nbG1hdHJpeC9xdWF0JztcclxuXHJcblxyXG52YXIgdG1wQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxudmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNrZWxldG9uXHJcbiAqL1xyXG52YXIgU2tlbGV0b24gPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNrZWxldG9uIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVsYXRpdmUgcm9vdCBub2RlIHRoYXQgbm90IGFmZmVjdCB0cmFuc2Zvcm0gb2Ygam9pbnQuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZWxhdGl2ZVJvb3ROb2RlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGpvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5Kb2ludD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgam9pbnRzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogYm91bmRpbmcgYm94IHdpdGggYm91bmQgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYm91bmRpbmdCb3g6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIC8vIE1hdHJpeCB0byBqb2ludCBzcGFjZSAocmVsYXRpdmUgdG8gcm9vdCBqb2ludClcclxuICAgICAgICBfaW52QmluZFBvc2VNYXRyaWNlc0FycmF5OiBudWxsLFxyXG5cclxuICAgICAgICAvLyBVc2Ugc3ViYXJyYXkgaW5zdGVhZCBvZiBjb3B5IGJhY2sgZWFjaCB0aW1lIGNvbXB1dGluZyBtYXRyaXhcclxuICAgICAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9zdWJhcnJheS12cy1jb3B5LWZvci1hcnJheS10cmFuc2Zvcm0vNVxyXG4gICAgICAgIF9qb2ludE1hdHJpY2VzU3ViQXJyYXlzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gam9pbnRNYXRyaXggKiBjdXJyZW50UG9zZU1hdHJpeFxyXG4gICAgICAgIC8vIHdvcmxkVHJhbnNmb3JtIGlzIHJlbGF0aXZlIHRvIHRoZSByb290IGJvbmVcclxuICAgICAgICAvLyBzdGlsbCBpbiBtb2RlbCBzcGFjZSBub3Qgd29ybGQgc3BhY2VcclxuICAgICAgICBfc2tpbk1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIF9za2luTWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICBfc3ViU2tpbk1hdHJpY2VzQXJyYXk6IHt9XHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2tlbGV0b24ucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIHNraW5uaW5nIGNsaXAgYW5kIGNyZWF0ZSBhIG1hcCBiZXR3ZWVuIGNsaXAgYW5kIHNrZWxldG9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFttYXBSdWxlXSBNYXAgYmV0d2VlbiBqb2ludCBuYW1lIGluIHNrZWxldG9uIGFuZCBqb2ludCBuYW1lIGluIGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXAsIG1hcFJ1bGUpIHtcclxuICAgICAgICAvLyBDbGlwIGhhdmUgYmVlbiBleGlzdHMgaW5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTWFwIHRoZSBqb2ludCBpbmRleCBpbiBza2VsZXRvbiB0byBqb2ludCBwb3NlIGluZGV4IGluIGNsaXBcclxuICAgICAgICB2YXIgbWFwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbWFwc1tpXSA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDcmVhdGUgYXZhdGFyXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tqXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50TmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwUnVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50TmFtZSA9IG1hcFJ1bGVbam9pbnROYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0cmFjay5uYW1lID09PSBqb2ludE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXBzW2pdID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2xpcHMucHVzaCh7XHJcbiAgICAgICAgICAgIG1hcHM6IG1hcHMsXHJcbiAgICAgICAgICAgIGNsaXA6IGNsaXBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzLmxlbmd0aCAtIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5Ta2lubmluZ0NsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gLTE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpcHNbaV0uY2xpcCA9PT0gY2xpcCkge1xyXG4gICAgICAgICAgICAgICAgaWR4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjbGlwIGJ5IGluZGV4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGluZGV4XHJcbiAgICAgKi9cclxuICAgIGdldENsaXA6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGlwc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzW2luZGV4XS5jbGlwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldENsaXBOdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBqb2ludCBtYXRyaWNlcyBmcm9tIG5vZGUgdHJhbnNmb3JtXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRNYXRyaWNlczogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIG00ID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShtNCwgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtNCwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpICogMTY7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXlbb2Zmc2V0ICsgal0gPSBtNFtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIGVhY2ggam9pbnQgYm91bmQgdG8gZ2VvbWV0cnkuXHJcbiAgICAgKiBBU1NVTUUgc2tlbGV0b24gYW5kIGdlb21ldHJ5IGpvaW50cyBhcmUgbWF0Y2hlZC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRzQm91bmRpbmdCb3hlczogZnVuY3Rpb24gKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbkF0dHIgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBqb2ludEF0dHIgPSBhdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgIHZhciB3ZWlnaHRBdHRyID0gYXR0cmlidXRlcy53ZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2ldID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0uX191cGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdnR4Sm9pbnQgPSBbXTtcclxuICAgICAgICB2YXIgdnR4UG9zID0gW107XHJcbiAgICAgICAgdmFyIHZ0eFdlaWdodCA9IFtdO1xyXG4gICAgICAgIHZhciBtYXhKb2ludElkeCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tZXRyeS52ZXJ0ZXhDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgdnR4Sm9pbnQpO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgIHdlaWdodEF0dHIuZ2V0KGksIHZ0eFdlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDQ7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZ0eFdlaWdodFtrXSA+IDAuMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRJZHggPSB2dHhKb2ludFtrXTtcclxuICAgICAgICAgICAgICAgICAgICBtYXhKb2ludElkeCA9IE1hdGgubWF4KG1heEpvaW50SWR4LCBqb2ludElkeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0uX191cGRhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWluID0gdmVjMy5taW4obWluLCBtaW4sIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gdmVjMy5tYXgobWF4LCBtYXgsIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2pvaW50c0JvdW5kaW5nQm94ZXMgPSBqb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgIGlmIChtYXhKb2ludElkeCA8IHRoaXMuam9pbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSBqb2ludHMgYW5kIHNrZWxldG9uIGpvaW50cyBkb25cXCd0IG1hdGNoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRKb2ludE1hdHJpY2VzQXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBhcnI7XHJcbiAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFyci5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTWF0cmljZXNTdWJBcnJheXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB0aGlzLl9zZXRQb3NlKCk7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2ludE1hdHJpY2VzU3ViQXJyYXlzW2ldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldChJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gam9pbnRzQm91bmRpbmdCb3hlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChiYm94Ll9fdXBkYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmNvcHkoYmJveCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wTWF0NC5hcnJheSA9IHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCb3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybSh0bXBNYXQ0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC51bmlvbih0bXBCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlczogZnVuY3Rpb24gKG1lc2hJZCwgam9pbnRzKSB7XHJcbiAgICAgICAgdmFyIHN1YkFycmF5ID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXTtcclxuICAgICAgICBpZiAoIXN1YkFycmF5KSB7XHJcbiAgICAgICAgICAgIHN1YkFycmF5XHJcbiAgICAgICAgICAgICAgICA9IHRoaXMuX3N1YlNraW5NYXRyaWNlc0FycmF5W21lc2hJZF1cclxuICAgICAgICAgICAgICAgID0gbmV3IEZsb2F0MzJBcnJheShqb2ludHMubGVuZ3RoICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHN1YkFycmF5W2N1cnNvcisrXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5W2lkeCAqIDE2ICsgal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1YkFycmF5O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc2tpbk1hdHJpY2VzID0gdGhpcy5nZXRTdWJTa2luTWF0cmljZXMobWVzaElkLCBqb2ludHMpO1xyXG4gICAgICAgIHZhciBzaXplO1xyXG4gICAgICAgIHZhciBudW1Kb2ludHMgPSB0aGlzLmpvaW50cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG51bUpvaW50cyA+IDI1Nikge1xyXG4gICAgICAgICAgICBzaXplID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG51bUpvaW50cyA+IDY0KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSAzMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gMTYpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDE2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgPSB0aGlzLl9za2luTWF0cmljZXNUZXh0dXJlIHx8IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmUud2lkdGggPSBzaXplO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gc2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLnBpeGVscyB8fCB0ZXh0dXJlLnBpeGVscy5sZW5ndGggIT09IHNpemUgKiBzaXplICogNCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIHNpemUgKiA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMuc2V0KHNraW5NYXRyaWNlcyk7XHJcbiAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRQb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzWzBdKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcHNbMF0uY2xpcDtcclxuICAgICAgICAgICAgdmFyIG1hcHMgPSB0aGlzLl9jbGlwc1swXS5tYXBzO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gdGhpcy5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwc1tpXSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3NlID0gY2xpcC50cmFja3NbbWFwc1tpXV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTm90IHVwZGF0ZSBpZiB0aGVyZSBpcyBubyBkYXRhLlxyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBJZiBzeW5jIHBvc2UucG9zaXRpb24sIHBvc2Uucm90YXRpb24sIHBvc2Uuc2NhbGVcclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUucG9zaXRpb24uYXJyYXksIHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWF0LmNvcHkoam9pbnQubm9kZS5yb3RhdGlvbi5hcnJheSwgcG9zZS5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuY29weShqb2ludC5ub2RlLnNjYWxlLmFycmF5LCBwb3NlLnNjYWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnBvc2l0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnJvdGF0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnNjYWxlLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oKTtcclxuICAgICAgICBza2VsZXRvbi5uYW1lID0gdGhpcy5uYW1lO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdKb2ludCA9IG5ldyBKb2ludCgpO1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgIG5ld0pvaW50LmluZGV4ID0gam9pbnQuaW5kZXg7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gY2xvbmVkTm9kZXNNYXBbam9pbnQubm9kZS5fX3VpZF9fXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGZpbmQgbm9kZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBuZXdOb2RlIHx8IGpvaW50Lm5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb2ludC5ub2RlID0gam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2gobmV3Sm9pbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSkge1xyXG4gICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5Lmxlbmd0aDtcclxuICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24udXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNrZWxldG9uLl9qb2ludHNCb3VuZGluZ0JveGUgPSAodGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyB8fCBbXSkubWFwKGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYm94LmNsb25lKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gc2tlbGV0b247XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2tlbGV0b247XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnV0aWwucmFuZFxcbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiB1dikge1xcbiBjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XFxuIGhpZ2hwIGZsb2F0IGR0ID0gZG90KHV2Lnh5LCB2ZWMyKGEsYikpLCBzbiA9IG1vZChkdCwgMy4xNDE1OTI2NTM1ODk3OTMpO1xcbiByZXR1cm4gZnJhY3Qoc2luKHNuKSAqIGMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkZhY3RvciA6IDUuMDtcXG5mbG9hdCBsaWdodEF0dGVudWF0aW9uKGZsb2F0IGRpc3QsIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSAxLjA7XFxuIGF0dGVudWF0aW9uID0gZGlzdCpkaXN0LyhyYW5nZSpyYW5nZSsxLjApO1xcbiBmbG9hdCBhdHRfcyA9IGF0dGVudWF0aW9uRmFjdG9yO1xcbiBhdHRlbnVhdGlvbiA9IDEuMC8oYXR0ZW51YXRpb24qYXR0X3MrMS4wKTtcXG4gYXR0X3MgPSAxLjAvKGF0dF9zKzEuMCk7XFxuIGF0dGVudWF0aW9uID0gYXR0ZW51YXRpb24gLSBhdHRfcztcXG4gYXR0ZW51YXRpb24gLz0gMS4wIC0gYXR0X3M7XFxuIHJldHVybiBjbGFtcChhdHRlbnVhdGlvbiwgMC4wLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG4jaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiB2ZWMzIGQgPSBmd2lkdGgodl9CYXJ5Y2VudHJpYyk7XFxuIHZlYzMgYTMgPSBzbW9vdGhzdGVwKHZlYzMoMC4wKSwgZCAqIHdpZHRoLCB2X0JhcnljZW50cmljKTtcXG4gcmV0dXJuIG1pbihtaW4oYTMueCwgYTMueSksIGEzLnopO1xcbn1cXG4jZWxzZVxcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiByZXR1cm4gMS4wO1xcbn1cXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudmVjNCBlbmNvZGVGbG9hdChjb25zdCBpbiBmbG9hdCBkZXB0aClcXG57XFxuIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgyNTYuMCoyNTYuMCoyNTYuMCwgMjU2LjAqMjU2LjAsIDI1Ni4wLCAxLjApO1xcbiBjb25zdCB2ZWM0IGJpdF9tYXNrID0gdmVjNCgwLjAsIDEuMC8yNTYuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjApO1xcbiB2ZWM0IHJlcyA9IGZyYWN0KGRlcHRoICogYml0U2hpZnRzKTtcXG4gcmVzIC09IHJlcy54eHl6ICogYml0X21hc2s7XFxuIHJldHVybiByZXM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCBkZWNvZGVGbG9hdChjb25zdCBpbiB2ZWM0IGNvbG9yKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDEuMC8oMjU2LjAqMjU2LjAqMjU2LjApLCAxLjAvKDI1Ni4wKjI1Ni4wKSwgMS4wLzI1Ni4wLCAxLjApO1xcbiByZXR1cm4gZG90KGNvbG9yLCBiaXRTaGlmdHMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG52ZWMzIFJHQk1EZWNvZGUodmVjNCByZ2JtLCBmbG9hdCByYW5nZSkge1xcbiByZXR1cm4gcmFuZ2UgKiByZ2JtLnJnYiAqIHJnYm0uYTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLnJnYm1fZW5jb2RlXFxudmVjNCBSR0JNRW5jb2RlKHZlYzMgY29sb3IsIGZsb2F0IHJhbmdlKSB7XFxuIGlmIChkb3QoY29sb3IsIGNvbG9yKSA9PSAwLjApIHtcXG4gcmV0dXJuIHZlYzQoMC4wKTtcXG4gfVxcbiB2ZWM0IHJnYm07XFxuIGNvbG9yIC89IHJhbmdlO1xcbiByZ2JtLmEgPSBjbGFtcChtYXgobWF4KGNvbG9yLnIsIGNvbG9yLmcpLCBtYXgoY29sb3IuYiwgMWUtNikpLCAwLjAsIDEuMCk7XFxuIHJnYm0uYSA9IGNlaWwocmdibS5hICogMjU1LjApIC8gMjU1LjA7XFxuIHJnYm0ucmdiID0gY29sb3IgLyByZ2JtLmE7XFxuIHJldHVybiByZ2JtO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IGRlY29kZUhEUih2ZWM0IGNvbG9yKVxcbntcXG4jaWYgZGVmaW5lZChSR0JNX0RFQ09ERSkgfHwgZGVmaW5lZChSR0JNKVxcbiByZXR1cm4gdmVjNChSR0JNRGVjb2RlKGNvbG9yLCA4LjEyKSwgMS4wKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbnZlYzQgZW5jb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fRU5DT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiBSR0JNRW5jb2RlKGNvbG9yLnh5eiwgOC4xMik7XFxuI2Vsc2VcXG4gcmV0dXJuIGNvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzQgc1JHQlRvTGluZWFyKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKDAuMDUyMTMyNzAxNCksIHZlYzMoMi40KSksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjA0MDQ1KSkpKSwgdmFsdWUudyk7XFxufVxcbnZlYzQgbGluZWFyVG9zUkdCKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IsIHZlYzMoMC40MTY2NikpICogMS4wNTUgLSB2ZWMzKDAuMDU1KSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMobGVzc1RoYW5FcXVhbCh2YWx1ZS5yZ2IsIHZlYzMoMC4wMDMxMzA4KSkpKSwgdmFsdWUudyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFNLSU5OSU5HXFxuYXR0cmlidXRlIHZlYzMgd2VpZ2h0IDogV0VJR0hUO1xcbmF0dHJpYnV0ZSB2ZWM0IGpvaW50IDogSk9JTlQ7XFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBza2luTWF0cmljZXNUZXh0dXJlIDogaWdub3JlO1xcbnVuaWZvcm0gZmxvYXQgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemU6IGlnbm9yZTtcXG5tYXQ0IGdldFNraW5NYXRyaXgoc2FtcGxlcjJEIHRleCwgZmxvYXQgaWR4KSB7XFxuIGZsb2F0IGogPSBpZHggKiA0LjA7XFxuIGZsb2F0IHggPSBtb2Qoaiwgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiBmbG9hdCB5ID0gZmxvb3IoaiAvIHNraW5NYXRyaWNlc1RleHR1cmVTaXplKSArIDAuNTtcXG4gdmVjMiBzY2FsZSA9IHZlYzIoc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiByZXR1cm4gbWF0NChcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMC41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMS41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMi41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMy41LCB5KSAvIHNjYWxlKVxcbiApO1xcbn1cXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHNraW5NYXRyaWNlc1RleHR1cmUsIGlkeCk7XFxufVxcbiNlbHNlXFxudW5pZm9ybSBtYXQ0IHNraW5NYXRyaXhbSk9JTlRfQ09VTlRdIDogU0tJTl9NQVRSSVg7XFxubWF0NCBnZXRTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gc2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG5tYXQ0IHNraW5NYXRyaXhXUyA9IGdldFNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG5pZiAod2VpZ2h0LnkgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTtcXG59XFxuaWYgKHdlaWdodC56ID4gMWUtNClcXG57XFxuIHNraW5NYXRyaXhXUyArPSBnZXRTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7XFxufVxcbmZsb2F0IHdlaWdodFcgPSAxLjAtd2VpZ2h0Lngtd2VpZ2h0Lnktd2VpZ2h0Lno7XFxuaWYgKHdlaWdodFcgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbnZlYzMgcGFyYWxsYXhDb3JyZWN0KGluIHZlYzMgZGlyLCBpbiB2ZWMzIHBvcywgaW4gdmVjMyBib3hNaW4sIGluIHZlYzMgYm94TWF4KSB7XFxuIHZlYzMgZmlyc3QgPSAoYm94TWF4IC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBzZWNvbmQgPSAoYm94TWluIC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBmdXJ0aGVyID0gbWF4KGZpcnN0LCBzZWNvbmQpO1xcbiBmbG9hdCBkaXN0ID0gbWluKGZ1cnRoZXIueCwgbWluKGZ1cnRoZXIueSwgZnVydGhlci56KSk7XFxuIHZlYzMgZml4ZWRQb3MgPSBwb3MgKyBkaXIgKiBkaXN0O1xcbiB2ZWMzIGJveENlbnRlciA9IChib3hNYXggKyBib3hNaW4pICogMC41O1xcbiByZXR1cm4gbm9ybWFsaXplKGZpeGVkUG9zIC0gYm94Q2VudGVyKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZlYzQgY2xhbXBTYW1wbGUoY29uc3QgaW4gc2FtcGxlcjJEIHRleHR1cmUsIGNvbnN0IGluIHZlYzIgY29vcmQpXFxue1xcbiNpZmRlZiBTVEVSRU9cXG4gZmxvYXQgZXllID0gc3RlcCgwLjUsIGNvb3JkLngpICogMC41O1xcbiB2ZWMyIGNvb3JkQ2xhbXBlZCA9IGNsYW1wKGNvb3JkLCB2ZWMyKGV5ZSwgMC4wKSwgdmVjMigwLjUgKyBleWUsIDEuMCkpO1xcbiNlbHNlXFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoMC4wKSwgdmVjMigxLjApKTtcXG4jZW5kaWZcXG4gcmV0dXJuIHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZENsYW1wZWQpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuYmFzaWMudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiB2X0NvbG9yID0gYV9Db2xvcjtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5iYXNpYy5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkpO1xcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElGRlVTRU1BUF9BTFBIQV9BTFBIQSlcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXhlbC5hO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleGVsLnJnYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gaWYoIGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5sYW1iZXJ0LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNCggc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoICggd29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApICkueHl6ICk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICggd29ybGQgKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCkgKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQuZnJhZ21lbnRcXG4jZGVmaW5lIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGdsX0ZyYWdDb2xvciAqPSB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBzUkdCVG9MaW5lYXIoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCBkaWZmdXNlTWFwLCB2X1RleGNvb3JkICk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleC5yZ2IgPSBwb3codGV4LnJnYiwgdmVjMygyLjIpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSB0ZXgucmdiO1xcbiNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hICo9IHRleC5hO1xcbiNlbmRpZlxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VDb2xvciA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge1xcbiBkaWZmdXNlQ29sb3IgKz0gYW1iaWVudExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZUNvbG9yICs9IGNhbGNBbWJpZW50U0hMaWdodChfaWR4Xywgdl9Ob3JtYWwpICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNQb2ludCk7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IFBPSU5UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBwb2ludExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW2ldO1xcbiB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIGxpZ2h0RGlyZWN0aW9uIC89IGRpc3Q7XFxuIGZsb2F0IG5kbCA9IGRvdCggdl9Ob3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBjbGFtcChuZGwsIDAuMCwgMS4wKSAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSAtZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltpXTtcXG4gdmVjMyBsaWdodENvbG9yID0gZGlyZWN0aW9uYWxMaWdodENvbG9yW2ldO1xcbiBmbG9hdCBuZGwgPSBkb3Qodl9Ob3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbikpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IC1zcG90TGlnaHRQb3NpdGlvbltpXTtcXG4gdmVjMyBzcG90TGlnaHREaXJlY3Rpb24gPSAtbm9ybWFsaXplKCBzcG90TGlnaHREaXJlY3Rpb25baV0gKTtcXG4gdmVjMyBsaWdodENvbG9yID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyggYiAtIGEpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24pO1xcbiBuZGwgPSBjbGFtcChuZGwsIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbiAqICgxLjAtZmFsbG9mZikgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZGlmZnVzZUNvbG9yO1xcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZihsaW5lV2lkdGggPiAwLilcXG4ge1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKGdsX0ZyYWdDb2xvci5hIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiBnbF9GcmFnQ29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKGdsX0ZyYWdDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb3NSR0IoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkud2lyZWZyYW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LndpcmVmcmFtZS5mcmFnbWVudFxcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMS4wO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAoMS4wLWVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBhbHBoYTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5za3lib3gudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBza3lib3hcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc2t5Ym94LmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjZcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgRVFVSVJFQ1RBTkdVTEFSXFxudW5pZm9ybSBzYW1wbGVyMkQgZW52aXJvbm1lbnRNYXA7XFxuI2Vsc2VcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbG9kOiAwLjA7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG4gZmxvYXQgcGhpID0gYWNvcyhWLnkpO1xcbiBmbG9hdCB0aGV0YSA9IGF0YW4oLVYueCwgVi56KSArIFBJICogMC41O1xcbiB2ZWMyIHV2ID0gdmVjMih0aGV0YSAvIDIuMCAvIFBJLCBwaGkgLyBQSSk7XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGVudmlyb25tZW50TWFwLCBmcmFjdCh1dikpKTtcXG4jZWxzZVxcbiAjaWYgZGVmaW5lZChMT0QpIHx8IGRlZmluZWQoU1VQUE9SVF9URVhUVVJFX0xPRClcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgViwgbG9kKSk7XFxuICNlbHNlXFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIFYpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodGV4ZWwucmdiLCAxLjApKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgbGlnaHRFc3NsIGZyb20gJy4vc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCB1dGlsRXNzbCBmcm9tICcuL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGJhc2ljRXNzbCBmcm9tICcuL3NvdXJjZS9iYXNpYy5nbHNsLmpzJztcclxuaW1wb3J0IGxhbWJlcnRFc3NsIGZyb20gJy4vc291cmNlL2xhbWJlcnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBzdGFuZGFyZEVzc2wgZnJvbSAnLi9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB3aXJlZnJhbWVFc3NsIGZyb20gJy4vc291cmNlL3dpcmVmcmFtZS5nbHNsLmpzJztcclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWJyYXJ5IGZyb20gJy4vbGlicmFyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10odXRpbEVzc2wpO1xyXG5cclxuLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcblNoYWRlclsnaW1wb3J0J10oYmFzaWNFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShsYW1iZXJ0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10oc3RhbmRhcmRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh3aXJlZnJhbWVFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShza3lib3hFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShwcmV6RXNzbCk7XHJcblxyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmJhc2ljJywgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5sYW1iZXJ0JywgU2hhZGVyLnNvdXJjZSgnY2xheS5sYW1iZXJ0LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkud2lyZWZyYW1lJywgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkud2lyZWZyYW1lLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnNreWJveCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5wcmV6JywgU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmQnLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnN0YW5kYXJkTVInLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuXHJcbi8vIFRPRE8gTXVzdCBleHBvcnQgYSBtb2R1bGUgYW5kIGJlIHVzZWQgaW4gdGhlIG90aGVyIG1vZHVsZXMuIE9yIGl0IHdpbGwgYmUgdHJlZSBzaGFrZWRcclxuZXhwb3J0IGRlZmF1bHQgbGlicmFyeTsiLCIvKipcclxuICogZ2xURiBMb2FkZXJcclxuICogU3BlY2lmaWNhdGlvbiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWRcclxuICpcclxuICogVE9ETyBNb3JwaCB0YXJnZXRzXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsIGZyb20gJy4uL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4uL3NoYWRlci9saWJyYXJ5JztcclxuaW1wb3J0IFNrZWxldG9uIGZyb20gJy4uL1NrZWxldG9uJztcclxuaW1wb3J0IEpvaW50IGZyb20gJy4uL0pvaW50JztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5cclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuaW1wb3J0IFRyYWNrQ2xpcCBmcm9tICcuLi9hbmltYXRpb24vVHJhY2tDbGlwJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayBmcm9tICcuLi9hbmltYXRpb24vU2FtcGxlclRyYWNrJztcclxuXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vLyBJbXBvcnQgYnVpbHRpbiBzaGFkZXJcclxuaW1wb3J0ICcuLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcbnZhciBzZW1hbnRpY0F0dHJpYnV0ZU1hcCA9IHtcclxuICAgICdOT1JNQUwnOiAnbm9ybWFsJyxcclxuICAgICdQT1NJVElPTic6ICdwb3NpdGlvbicsXHJcbiAgICAnVEVYQ09PUkRfMCc6ICd0ZXhjb29yZDAnLFxyXG4gICAgJ1RFWENPT1JEXzEnOiAndGV4Y29vcmQxJyxcclxuICAgICdXRUlHSFRTXzAnOiAnd2VpZ2h0JyxcclxuICAgICdKT0lOVFNfMCc6ICdqb2ludCcsXHJcbiAgICAnQ09MT1JfMCc6ICdjb2xvcidcclxufTtcclxuXHJcbnZhciBBUlJBWV9DVE9SX01BUCA9IHtcclxuICAgIDUxMjA6IHZlbmRvci5JbnQ4QXJyYXksXHJcbiAgICA1MTIxOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgIDUxMjI6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgNTEyMzogdmVuZG9yLlVpbnQxNkFycmF5LFxyXG4gICAgNTEyNTogdmVuZG9yLlVpbnQzMkFycmF5LFxyXG4gICAgNTEyNjogdmVuZG9yLkZsb2F0MzJBcnJheVxyXG59O1xyXG52YXIgU0laRV9NQVAgPSB7XHJcbiAgICBTQ0FMQVI6IDEsXHJcbiAgICBWRUMyOiAyLFxyXG4gICAgVkVDMzogMyxcclxuICAgIFZFQzQ6IDQsXHJcbiAgICBNQVQyOiA0LFxyXG4gICAgTUFUMzogOSxcclxuICAgIE1BVDQ6IDE2XHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBhY2Nlc3NvcklkeCwgaXNJbmRpY2VzKSB7XHJcbiAgICB2YXIgYWNjZXNzb3JJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG5cclxuICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbYWNjZXNzb3JJbmZvLmJ1ZmZlclZpZXddO1xyXG4gICAgdmFyIGJ5dGVPZmZzZXQgPSBhY2Nlc3NvckluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IEFSUkFZX0NUT1JfTUFQW2FjY2Vzc29ySW5mby5jb21wb25lbnRUeXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG5cclxuICAgIHZhciBzaXplID0gU0laRV9NQVBbYWNjZXNzb3JJbmZvLnR5cGVdO1xyXG4gICAgaWYgKHNpemUgPT0gbnVsbCAmJiBpc0luZGljZXMpIHtcclxuICAgICAgICBzaXplID0gMTtcclxuICAgIH1cclxuICAgIHZhciBhcnIgPSBuZXcgQXJyYXlDdG9yKGJ1ZmZlciwgYnl0ZU9mZnNldCwgc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcblxyXG4gICAgdmFyIHF1YW50aXplRXh0ZW5zaW9uID0gYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnMgJiYgYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnNbJ1dFQjNEX3F1YW50aXplZF9hdHRyaWJ1dGVzJ107XHJcbiAgICBpZiAocXVhbnRpemVFeHRlbnNpb24pIHtcclxuICAgICAgICB2YXIgZGVjb2RlZEFyciA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHNpemUgKiBhY2Nlc3NvckluZm8uY291bnQpO1xyXG4gICAgICAgIHZhciBkZWNvZGVNYXRyaXggPSBxdWFudGl6ZUV4dGVuc2lvbi5kZWNvZGVNYXRyaXg7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldDtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGU7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldCA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGUgPSBuZXcgQXJyYXkoc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgZGVjb2RlT2Zmc2V0W2tdID0gZGVjb2RlTWF0cml4W3NpemUgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgICAgIGRlY29kZVNjYWxlW2tdID0gZGVjb2RlTWF0cml4W2sgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWNjZXNzb3JJbmZvLmNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIGRlY29kZWRBcnJbaSAqIHNpemUgKyBrXSA9IGFycltpICogc2l6ZSArIGtdICogZGVjb2RlU2NhbGVba10gKyBkZWNvZGVPZmZzZXRba107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyciA9IGRlY29kZWRBcnI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlNjRUb0JpbmFyeShpbnB1dCwgY2hhclN0YXJ0KSB7XHJcbiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XHJcbiAgICB2YXIgbG9va3VwID0gbmV3IFVpbnQ4QXJyYXkoMTMwKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xyXG4gICAgfVxyXG4gICAgLy8gSWdub3JlXHJcbiAgICB2YXIgbGVuID0gaW5wdXQubGVuZ3RoIC0gY2hhclN0YXJ0O1xyXG4gICAgaWYgKGlucHV0LmNoYXJBdChsZW4gLSAxKSA9PT0gJz0nKSB7IGxlbi0tOyB9XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuXHJcbiAgICB2YXIgdWFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbiAvIDQpICogMyk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBjaGFyU3RhcnQ7IGkgPCB1YXJyYXkubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjMSA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMiA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMyA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjNCA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG5cclxuICAgICAgICB1YXJyYXlbaSsrXSA9IChjMSA8PCAyKSB8IChjMiA+PiA0KTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzIgJiAxNSkgPDwgNCkgfCAoYzMgPj4gMik7XHJcbiAgICAgICAgdWFycmF5W2krK10gPSAoKGMzICYgMykgPDwgNikgfCBjNDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdWFycmF5LmJ1ZmZlcjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmxvYWRlci5HTFRGLlJlc3VsdFxyXG4gKiBAcHJvcGVydHkge09iamVjdH0ganNvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlfSByb290Tm9kZVxyXG4gKiBAcHJvcGVydHkge2NsYXkuQ2FtZXJhW119IGNhbWVyYXNcclxuICogQHByb3BlcnR5IHtjbGF5LlRleHR1cmVbXX0gdGV4dHVyZXNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1hdGVyaWFsW119IG1hdGVyaWFsc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuU2tlbGV0b25bXX0gc2tlbGV0b25zXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NZXNoW119IG1lc2hlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFtdfSBjbGlwc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTm9kZVtdfSBub2Rlc1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5sb2FkZXIuR0xURlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdMVEZMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYjICovIHtcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIHJvb3ROb2RlOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHVyaSBwYXJzaW5nLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHRleHR1cmUgdXJpIHBhcnNpbmcuIERlZmF1bHRseSB1c2UgdGhlIHJvb3RQYXRoXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIGJ1ZmZlciB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGJ1ZmZlclJvb3RQYXRoOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hhZGVyIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgbWF0ZXJpYWxzLlxyXG4gICAgICogQHR5cGUge3N0cmluZ3xjbGF5LlNoYWRlcn1cclxuICAgICAqIEBkZWZhdWx0ICdjbGF5LnN0YW5kYXJkJ1xyXG4gICAgICovXHJcbiAgICBzaGFkZXI6ICdjbGF5LnN0YW5kYXJkJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSB7QGxpbmsgY2xheS5TdGFuZGFyZE1hdGVyaWFsfVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdXNlU3RhbmRhcmRNYXRlcmlhbDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBjYW1lcmFzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVDYW1lcmE6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBhbmltYXRpb25zLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVBbmltYXRpb246IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIG1lc2hlc1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVNZXNoOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSB0ZXh0dXJlcy5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbmNsdWRlVGV4dHVyZTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzT3JpZ2luOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvNjc0XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVGbGlwWTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogZmFsc2UsXHJcblxyXG4gICAgc2hhZGVyTGlicmFyeTogbnVsbFxyXG59LFxyXG5mdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hhZGVyTGlicmFyeSkge1xyXG4gICAgICAgIHRoaXMuc2hhZGVyTGlicmFyeSA9IHNoYWRlckxpYnJhcnkuY3JlYXRlTGlicmFyeSgpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBpc0JpbmFyeSA9IHVybC5lbmRzV2l0aCgnLmdsYicpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdFBhdGggPSB1cmwuc2xpY2UoMCwgdXJsLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uIChwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogaXNCaW5hcnkgPyAnYXJyYXlidWZmZXInIDogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNCaW5hcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlQmluYXJ5KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlIGdsVEYgYmluYXJ5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBidWZmZXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZUJpbmFyeTogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLCAwLCA0KTtcclxuICAgICAgICBpZiAoaGVhZGVyWzBdICE9PSAweDQ2NTQ2QzY3KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IEludmFsaWQgaGVhZGVyJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhlYWRlclswXSA8IDIpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdPbmx5IGdsVEYyLjAgaXMgc3VwcG9ydGVkLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLCAxMik7XHJcblxyXG4gICAgICAgIHZhciBqc29uO1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcbiAgICAgICAgLy8gUmVhZCBjaHVua3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFWaWV3LmJ5dGVMZW5ndGg7KSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua0xlbmd0aCA9IGRhdGFWaWV3LmdldFVpbnQzMihpLCB0cnVlKTtcclxuICAgICAgICAgICAgaSArPSA0O1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtUeXBlID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcblxyXG4gICAgICAgICAgICAvLyBqc29uXHJcbiAgICAgICAgICAgIGlmIChjaHVua1R5cGUgPT09IDB4NEU0RjUzNEEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWZmZXIsIGkgKyAxMiwgY2h1bmtMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETywgZm9yIHRoZSBicm93c2VyIG5vdCBzdXBwb3J0IFRleHREZWNvZGVyLlxyXG4gICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBkZWNvZGVyLmRlY29kZShhcnIpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShzdHIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0pTT04gUGFyc2UgZXJyb3I6JyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNodW5rVHlwZSA9PT0gMHgwMDRFNDk0Mikge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlci5zbGljZShpICsgMTIsIGkgKyAxMiArIGNodW5rTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgKz0gY2h1bmtMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghanNvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0ludmFsaWQgZ2xURiBiaW5hcnkgZm9ybWF0OiBDYW5cXCd0IGZpbmQgSlNPTi4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoanNvbiwgYnVmZmVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGpzb25cclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJbXX0gW2J1ZmZlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZTogZnVuY3Rpb24gKGpzb24sIGJ1ZmZlcnMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgIGJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICBidWZmZXJWaWV3czogW10sXHJcbiAgICAgICAgICAgIG1hdGVyaWFsczogW10sXHJcbiAgICAgICAgICAgIHRleHR1cmVzOiBbXSxcclxuICAgICAgICAgICAgbWVzaGVzOiBbXSxcclxuICAgICAgICAgICAgam9pbnRzOiBbXSxcclxuICAgICAgICAgICAgc2tlbGV0b25zOiBbXSxcclxuICAgICAgICAgICAgY2FtZXJhczogW10sXHJcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcclxuICAgICAgICAgICAgY2xpcHM6IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBNb3VudCBvbiB0aGUgcm9vdCBub2RlIGlmIGdpdmVuXHJcbiAgICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5yb290Tm9kZSB8fCBuZXcgU2NlbmUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZCgpIHtcclxuICAgICAgICAgICAgbG9hZGluZy0tO1xyXG4gICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgYWxyZWFkeSBsb2FkIGJ1ZmZlcnNcclxuICAgICAgICBpZiAoYnVmZmVycykge1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IGJ1ZmZlcnMuc2xpY2UoKTtcclxuICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTG9hZCBidWZmZXJzXHJcbiAgICAgICAgICAgIHV0aWwuZWFjaChqc29uLmJ1ZmZlcnMsIGZ1bmN0aW9uIChidWZmZXJJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gYnVmZmVySW5mby51cmk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fbG9hZEJ1ZmZlcnMocGF0aCwgZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi5idWZmZXJzW2lkeF0gPSBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBjaGVja0xvYWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgICAgICBzY2VuZTogc2VsZi5yb290Tm9kZSA/IG51bGwgOiByb290Tm9kZSxcclxuICAgICAgICAgICAgICAgIHJvb3ROb2RlOiBzZWxmLnJvb3ROb2RlID8gcm9vdE5vZGUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhczogbGliLmNhbWVyYXMsXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlczogbGliLnRleHR1cmVzLFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxzOiBsaWIubWF0ZXJpYWxzLFxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b25zOiBsaWIuc2tlbGV0b25zLFxyXG4gICAgICAgICAgICAgICAgbWVzaGVzOiBsaWIuaW5zdGFuY2VkTWVzaGVzLFxyXG4gICAgICAgICAgICAgICAgY2xpcHM6IGxpYi5jbGlwcyxcclxuICAgICAgICAgICAgICAgIG5vZGVzOiBsaWIubm9kZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZEJ1ZmZlcihpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAvLyBCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuXHJcbiAgICAgICAgICAgIGlmIChsaWIuYnVmZmVycy5sZW5ndGggIT09IGpzb24uYnVmZmVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCAnQnVmZmVyIG5vdCBsb2FkIGNvbXBsZXRlLicpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGpzb24uYnVmZmVyVmlld3MuZm9yRWFjaChmdW5jdGlvbiAoYnVmZmVyVmlld0luZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgICAgICAgICAgbGliLmJ1ZmZlclZpZXdzW2lkeF0gPSBsaWIuYnVmZmVyc1tidWZmZXJWaWV3SW5mby5idWZmZXJdXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCwgKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCkgKyAoYnVmZmVyVmlld0luZm8uYnl0ZUxlbmd0aCB8fCAwKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlVGV4dHVyZXMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWF0ZXJpYWxzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZU1lc2hlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlTm9kZXMoanNvbiwgbGliKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBvbmUgc2NlbmUuXHJcbiAgICAgICAgICAgIGlmIChqc29uLnNjZW5lcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNjZW5lSW5mbyA9IGpzb24uc2NlbmVzW2pzb24uc2NlbmUgfHwgMF07IC8vIERlZmF1bHQgdXNlIHRoZSBmaXJzdCBzY2VuZS5cclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZUluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lSW5mby5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tzY2VuZUluZm8ubm9kZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290Tm9kZS5hZGQobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VTa2lucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZUFuaW1hdGlvbnMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW1tZWRpYXRlbHkpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluYXJ5IGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVCdWZmZXJQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy5idWZmZXJSb290UGF0aDtcclxuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByb290UGF0aCA9IHRoaXMucm9vdFBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVUZXh0dXJlUGF0aDogZnVuY3Rpb24gKHBhdGgpIHtcclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoLm1hdGNoKC9eZGF0YTooLio/KWJhc2U2NCwvKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByb290UGF0aCA9IHRoaXMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1ZmZlciBsb2FkZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25zdWNjZXNzXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbmVycm9yXHJcbiAgICAgKi9cclxuICAgIGxvYWRCdWZmZXI6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHBhdGgsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uZXJyb3IgJiYgb25lcnJvcihidWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTaGFkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhZGVyID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkZXJMaWJyYXJ5LmdldCh0aGlzLnNoYWRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9sb2FkQnVmZmVyczogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBiYXNlNjRQcmVmaXggPSAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCc7XHJcbiAgICAgICAgdmFyIHN0clN0YXJ0ID0gcGF0aC5zdWJzdHIoMCwgYmFzZTY0UHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHN0clN0YXJ0ID09PSBiYXNlNjRQcmVmaXgpIHtcclxuICAgICAgICAgICAgb25zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgYmFzZTY0VG9CaW5hcnkocGF0aCwgYmFzZTY0UHJlZml4Lmxlbmd0aClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEJ1ZmZlcihcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUJ1ZmZlclBhdGgocGF0aCksXHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MsXHJcbiAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzEwMFxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTNcclxuICAgIF9wYXJzZVNraW5zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBza2VsZXRvbnMgYW5kIGpvaW50c1xyXG4gICAgICAgIHZhciBoYXZlSW52QmluZE1hdHJpY2VzID0gZmFsc2U7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uc2tpbnMsIGZ1bmN0aW9uIChza2luSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbih7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBza2luSW5mby5uYW1lXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNraW5JbmZvLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVJZHggPSBza2luSW5mby5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IG5ldyBKb2ludCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHNrZWxldG9uLmpvaW50cy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2goam9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNrZWxldG9uLnJlbGF0aXZlUm9vdE5vZGUgPSBsaWIubm9kZXNbc2tpbkluZm8uc2tlbGV0b25dIHx8IHRoaXMucm9vdE5vZGU7XHJcbiAgICAgICAgICAgIGlmIChza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBoYXZlSW52QmluZE1hdHJpY2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBJQk1JbmZvID0ganNvbi5hY2Nlc3NvcnNbc2tpbkluZm8uaW52ZXJzZUJpbmRNYXRyaWNlc107XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbGliLmJ1ZmZlclZpZXdzW0lCTUluZm8uYnVmZmVyVmlld107XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IElCTUluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBJQk1JbmZvLmNvdW50ICogMTY7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNpemUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnNldEpvaW50TWF0cmljZXNBcnJheShhcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludE1hdHJpY2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGliLnNrZWxldG9uc1tpZHhdID0gc2tlbGV0b247XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGVuYWJsZVNraW5uaW5nRm9yTWVzaChtZXNoLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIG1lc2guc2tlbGV0b24gPSBza2VsZXRvbjtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSBqb2ludEluZGljZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNrZWxldG9uLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzKG1lc2guZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRKb2ludEluZGV4KGpvaW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBqb2ludC5pbmRleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIG5vZGVJZHgpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNraW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5JZHggPSBub2RlSW5mby5za2luO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbGliLnNrZWxldG9uc1tza2luSWR4XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludEluZGljZXMgPSBza2VsZXRvbi5qb2ludHMubWFwKGdldEpvaW50SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG5vZGUsIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWVzaCBoYXZlIG11bHRpcGxlIHByaW1pdGl2ZXNcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2goY2hpbGRyZW5baV0sIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VUZXh0dXJlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLnRleHR1cmVzLCBmdW5jdGlvbiAodGV4dHVyZUluZm8sIGlkeCl7XHJcbiAgICAgICAgICAgIC8vIHNhbXBsZXJzIGlzIG9wdGlvbmFsXHJcbiAgICAgICAgICAgIHZhciBzYW1wbGVySW5mbyA9IChqc29uLnNhbXBsZXJzICYmIGpzb24uc2FtcGxlcnNbdGV4dHVyZUluZm8uc2FtcGxlcl0pIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgICAgICAgICBbJ3dyYXBTJywgJ3dyYXBUJywgJ21hZ0ZpbHRlcicsICdtaW5GaWx0ZXInXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzYW1wbGVySW5mb1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyhwYXJhbWV0ZXJzLCB7XHJcbiAgICAgICAgICAgICAgICB3cmFwUzogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICB3cmFwVDogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICBmbGlwWTogdGhpcy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IHRoaXMudGV4dHVyZUNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0ZXh0dXJlSW5mby50YXJnZXQgfHwgZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSB0ZXh0dXJlSW5mby5mb3JtYXQ7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGdsZW51bS5URVhUVVJFXzJEKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2VJbmZvID0ganNvbi5pbWFnZXNbdGV4dHVyZUluZm8uc291cmNlXTtcclxuICAgICAgICAgICAgICAgIHZhciB1cmk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmZvLnVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IHRoaXMucmVzb2x2ZVRleHR1cmVQYXRoKGltYWdlSW5mby51cmkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VJbmZvLmJ1ZmZlclZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2xpYi5idWZmZXJWaWV3c1tpbWFnZUluZm8uYnVmZmVyVmlld11dLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGltYWdlSW5mby5taW1lVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1cmkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJpLCB0aGlzLmNyb3NzT3JpZ2luKTtcclxuICAgICAgICAgICAgICAgICAgICBsaWIudGV4dHVyZXNbaWR4XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIGNvbW1vbk1hdGVyaWFsSW5mbyA9IG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddO1xyXG4gICAgICAgIHVuaWZvcm1zID0gY29tbW9uTWF0ZXJpYWxJbmZvLnZhbHVlcyB8fCB7fTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5kaWZmdXNlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNlID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmRpZmZ1c2VdIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdW5pZm9ybXMuZW1pc3Npb24gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmVtaXNzaW9uID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmVtaXNzaW9uXSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZGlmZnVzZSddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZW1pc3Npb24nXSBpbnN0YW5jZW9mIFRleHR1cmUyRCkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9NRVRBTE5FU1MnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRE9VQkxFX1NJREVEJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1bmlmb3Jtcy50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRpZmZ1c2VQcm9wID0gdW5pZm9ybXNbJ2RpZmZ1c2UnXTtcclxuICAgICAgICBpZiAoZGlmZnVzZVByb3ApIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZnVzZVByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmdXNlUHJvcCA9IGRpZmZ1c2VQcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmNvbG9yID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2NvbG9yJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgeyAvLyBUZXh0dXJlXHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZGlmZnVzZU1hcCA9IGRpZmZ1c2VQcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbWlzc2lvblByb3AgPSB1bmlmb3Jtc1snZW1pc3Npb24nXTtcclxuICAgICAgICBpZiAoZW1pc3Npb25Qcm9wICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW1pc3Npb25Qcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgZW1pc3Npb25Qcm9wID0gZW1pc3Npb25Qcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaW9uID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2lvbicsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5lbWlzc2l2ZU1hcCA9IGVtaXNzaW9uUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZW1pc3NpdmVNYXAnLCBlbWlzc2lvblByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICAgICAgdmFyIG5vcm1hbFRleHR1cmVJbmRleCA9IG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4O1xyXG4gICAgICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdub3JtYWxNYXAnLCBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NoaW5pbmVzcyddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGdsb3NzaW5lc3MgPSBNYXRoLmxvZyh1bmlmb3Jtc1snc2hpbmluZXNzJ10pIC8gTWF0aC5sb2coODE5Mik7XHJcbiAgICAgICAgICAgIC8vIFVuaWZvcm0gZ2xvc3NpbmVzc1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdyb3VnaG5lc3MnLCAxIC0gZ2xvc3NpbmVzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCAwLjMpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDAuMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc3BlY3VsYXInXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc3BlY3VsYXJDb2xvcicsIHVuaWZvcm1zWydzcGVjdWxhciddLnNsaWNlKDAsIDMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnYWxwaGEnLCB1bmlmb3Jtc1sndHJhbnNwYXJlbmN5J10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyTWV0YWxsaWNSb3VnaG5lc3NUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCByb3VnaG5lc3NNYXAsIG1ldGFsbmVzc01hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIHRoZSBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIGBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZWAgaXMgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB2YXIgbm9ybWFsU2NhbGUgPSAxLjA7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvclRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZGlmZnVzZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgPSBsaWIudGV4dHVyZXNbbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdtZXRhbG5lc3NNYXAnLCAncm91Z2huZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG5cclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbFNjYWxlID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuc2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYmFzZUNvbG9yID0gbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvckZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcDogcm91Z2huZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzc01hcDogbWV0YWxuZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogYmFzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogYmFzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBtZXRhbG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5tZXRhbGxpY0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICByb3VnaG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5yb3VnaG5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmIHx8IDAsXHJcbiAgICAgICAgICAgIG5vcm1hbFNjYWxlOiBub3JtYWxTY2FsZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMucm91Z2huZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGdsVEYgbWV0YWxsaWNGYWN0b3Igd2lsbCBkbyBtdWx0aXBseSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gU3RhbmRhcmRNYXRlcmlhbC5cclxuICAgICAgICAgICAgLy8gU28gc2ltcGx5IGlnbm9yZSBpdFxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLm1ldGFsbmVzcyA9IDAuNTtcclxuICAgICAgICAgICAgY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgU3RhbmRhcmRNYXRlcmlhbCh1dGlsLmV4dGVuZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGFscGhhVGVzdDogYWxwaGFUZXN0LFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCxcclxuICAgICAgICAgICAgICAgIC8vIEcgY2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMSxcclxuICAgICAgICAgICAgICAgIC8vIEIgQ2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMlxyXG4gICAgICAgICAgICB9LCBjb21tb25Qcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJywgMSk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTUVUQUxORVNTX0NIQU5ORUwnLCAyKTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRElGRlVTRU1BUF9BTFBIQV9BTFBIQScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU3RhbmRhcmRNYXRlcmlhbCBkb2VzblxcJ3Qgc3VwcG9ydCBzcGVjdWxhciBnbG9zc2luZXNzIHdvcmtmbG93IHlldCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCBnbG9zc2luZXNzTWFwLCBzcGVjdWxhck1hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICAvLyBUT0RPIHRleENvb3JkXHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1tzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmRpZmZ1c2VUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCA9IHNwZWN1bGFyTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnc3BlY3VsYXJNYXAnLCAnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUpIHtcclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdvY2NsdXNpb25NYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VDb2xvciA9IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZUZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXA6IGdsb3NzaW5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgc3BlY3VsYXJNYXA6IHNwZWN1bGFyTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXA6IG9jY2x1c2lvbk1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogZGlmZnVzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogZGlmZnVzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBzcGVjdWxhckNvbG9yOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyRmFjdG9yIHx8IFsxLCAxLCAxXSxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5nbG9zc2luZXNzRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIGVtaXNzaW9uOiBtYXRlcmlhbEluZm8uZW1pc3NpdmVGYWN0b3IgfHwgWzAsIDAsIDBdLFxyXG4gICAgICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMSxcclxuICAgICAgICAgICAgYWxwaGFDdXRvZmY6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZiA9PSBudWxsID8gMC45IDogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5nbG9zc2luZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyQ29sb3IgPSBbMSwgMSwgMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJywgMyk7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgIGlmIChhbHBoYVRlc3QpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLnNldChjb21tb25Qcm9wZXJ0aWVzKTtcclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWF0ZXJpYWxzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWF0ZXJpYWxzLCBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9LSFJDb21tb25NYXRlcmlhbFRvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX3BiclNwZWN1bGFyR2xvc3NpbmVzcyddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJTcGVjdWxhckdsb3NzaW5lc3NUb1N0YW5kYXJkKG1hdGVyaWFsSW5mbywgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8ucGJyTWV0YWxsaWNSb3VnaG5lc3MgfHwge30sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWVzaGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tZXNoZXMsIGZ1bmN0aW9uIChtZXNoSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XSA9IFtdO1xyXG4gICAgICAgICAgICAvLyBHZW9tZXRyeVxyXG4gICAgICAgICAgICBmb3IgKHZhciBwcCA9IDA7IHBwIDwgbWVzaEluZm8ucHJpbWl0aXZlcy5sZW5ndGg7IHBwKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVJbmZvID0gbWVzaEluZm8ucHJpbWl0aXZlc1twcF07XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJR05cclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtZXNoSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94OiBuZXcgQm91bmRpbmdCb3goKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNzID0gT2JqZWN0LmtleXMocHJpbWl0aXZlSW5mby5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHNzID0gMDsgc3MgPCBzZW1hbnRpY3MubGVuZ3RoOyBzcysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gc2VtYW50aWNzW3NzXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZXNzb3JJZHggPSBwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gc2VtYW50aWNBdHRyaWJ1dGVNYXBbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBTSVpFX01BUFthdHRyaWJ1dGVJbmZvLnR5cGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVBcnJheSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXZWJHTCBhdHRyaWJ1dGUgYnVmZmVyIG5vdCBzdXBwb3J0IHVpbnQzMi5cclxuICAgICAgICAgICAgICAgICAgICAvLyBEaXJlY3QgdXNlIEZsb2F0MzJBcnJheSBtYXkgYWxzbyBoYXZlIGlzc3VlLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0cmlidXRlQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdXRUlHSFRTXzAnICYmIHNpemUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VpZ2h0IGRhdGEgaW4gUVRFSyBoYXMgb25seSAzIGNvbXBvbmVudCwgdGhlIGxhc3QgY29tcG9uZW50IGNhbiBiZSBldmFsdWF0ZWQgc2luY2UgaXQgaXMgbm9ybWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2VpZ2h0QXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzEgPSBhdHRyaWJ1dGVBcnJheVtpNF0sIHcyID0gYXR0cmlidXRlQXJyYXlbaTQgKyAxXSwgdzMgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDJdLCB3NCA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgM107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd1N1bSA9IHcxICsgdzIgKyB3MyArIHc0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTNdID0gdzEgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAxXSA9IHcyIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodEFycmF5W2kzICsgMl0gPSB3MyAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IHdlaWdodEFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ0NPTE9SXzAnICYmIHNpemUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yQXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0XSA9IGF0dHJpYnV0ZUFycmF5W2kzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAxXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgMl0gPSBhdHRyaWJ1dGVBcnJheVtpMyArIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDNdID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gY29sb3JBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBhdHRyaWJ1dGVBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVUeXBlID0gJ2Zsb2F0JztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1c2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQxNkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAnc2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAndWJ5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdieXRlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS50eXBlID0gYXR0cmlidXRlVHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljID09PSAnUE9TSVRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdW5kaW5nIEJveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gYXR0cmlidXRlSW5mby5taW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBhdHRyaWJ1dGVJbmZvLm1heDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnNldChtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXguc2V0KG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGluZGljZXNcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVJbmZvLmluZGljZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBwcmltaXRpdmVJbmZvLmluZGljZXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tZXRyeS52ZXJ0ZXhDb3VudCA8PSAweGZmZmYgJiYgZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IHZlbmRvci5VaW50MTZBcnJheShnZW9tZXRyeS5pbmRpY2VzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBsaWIubWF0ZXJpYWxzW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsSW5mbyA9IChqc29uLm1hdGVyaWFscyB8fCBbXSlbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgZGVmYXVsdCBtYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiBzZWxmLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBbTWVzaC5QT0lOVFMsIE1lc2guTElORVMsIE1lc2guTElORV9MT09QLCBNZXNoLkxJTkVfU1RSSVAsIE1lc2guVFJJQU5HTEVTLCBNZXNoLlRSSUFOR0xFX1NUUklQLCBNZXNoLlRSSUFOR0xFX0ZBTl1bcHJpbWl0aXZlSW5mby5tb2RlXSB8fCBNZXNoLlRSSUFOR0xFUyxcclxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVHQnVmZmVyOiBtYXRlcmlhbC50cmFuc3BhcmVudFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmN1bGxpbmcgPSAhbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgoKG1hdGVyaWFsIGluc3RhbmNlb2YgU3RhbmRhcmRNYXRlcmlhbCkgJiYgbWF0ZXJpYWwubm9ybWFsTWFwKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRlcmlhbC5pc1RleHR1cmVFbmFibGVkKCdub3JtYWxNYXAnKSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdWRVJURVhfQ09MT1InKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtZXNoLm5hbWUgPSBHTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUoanNvbi5tZXNoZXMsIGlkeCwgcHApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XS5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pbnN0YW5jZUNhbWVyYTogZnVuY3Rpb24gKGpzb24sIG5vZGVJbmZvKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYUluZm8gPSBqc29uLmNhbWVyYXNbbm9kZUluZm8uY2FtZXJhXTtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYUluZm8udHlwZSA9PT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICB2YXIgcGVyc3BlY3RpdmVJbmZvID0gY2FtZXJhSW5mby5wZXJzcGVjdGl2ZSB8fCB7fTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYXNwZWN0OiBwZXJzcGVjdGl2ZUluZm8uYXNwZWN0UmF0aW8sXHJcbiAgICAgICAgICAgICAgICBmb3Y6IHBlcnNwZWN0aXZlSW5mby55Zm92IC8gTWF0aC5QSSAqIDE4MCxcclxuICAgICAgICAgICAgICAgIGZhcjogcGVyc3BlY3RpdmVJbmZvLnpmYXIsXHJcbiAgICAgICAgICAgICAgICBuZWFyOiBwZXJzcGVjdGl2ZUluZm8uem5lYXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgb3J0aG9ncmFwaGljSW5mbyA9IGNhbWVyYUluZm8ub3J0aG9ncmFwaGljIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBvcnRob2dyYXBoaWNJbmZvLnltYWcsXHJcbiAgICAgICAgICAgICAgICByaWdodDogb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogLW9ydGhvZ3JhcGhpY0luZm8ueG1hZyxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogLW9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIG5lYXI6IG9ydGhvZ3JhcGhpY0luZm8uem5lYXIsXHJcbiAgICAgICAgICAgICAgICBmYXI6IG9ydGhvZ3JhcGhpY0luZm8uemZhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZU5vZGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGluc3RhbmNlTWVzaChtZXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtZXNoLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbWVzaC5nZW9tZXRyeSxcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtZXNoLm1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgY3VsbGluZzogbWVzaC5jdWxsaW5nLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogbWVzaC5tb2RlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcyA9IFtdO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKG5vZGVJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGU7XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jYW1lcmEgIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVDYW1lcmEpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9pbnN0YW5jZUNhbWVyYShqc29uLCBub2RlSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBsaWIuY2FtZXJhcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGVJbmZvLm1lc2ggIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJpbWl0aXZlcyA9IGxpYi5tZXNoZXNbbm9kZUluZm8ubWVzaF07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBub2RlIHdpdGggbWVzaCBkaXJlY3RseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gaW5zdGFuY2VNZXNoKHByaW1pdGl2ZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01lc2ggPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1tqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBEdWxwbGljYXRlIG5hbWUuXHJcbiAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLm1hdHJpeCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5sb2NhbFRyYW5zZm9ybS5zZXRBcnJheShub2RlSW5mby5tYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnRyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wb3NpdGlvbi5zZXRBcnJheShub2RlSW5mby50cmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8ucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJvdGF0aW9uLnNldEFycmF5KG5vZGVJbmZvLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2NhbGUuc2V0QXJyYXkobm9kZUluZm8uc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsaWIubm9kZXNbaWR4XSA9IG5vZGU7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGhpZXJhcmNoeVxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tpZHhdO1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUluZm8uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRJZHggPSBub2RlSW5mby5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBsaWIubm9kZXNbY2hpbGRJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQW5pbWF0aW9uczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ2hhbm5lbFBhdGgoY2hhbm5lbEluZm8pIHtcclxuICAgICAgICAgICAgaWYgKGNoYW5uZWxJbmZvLnBhdGggPT09ICd3ZWlnaHRzJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG5vdCBzdXBwb3J0IG1vcnBoIHRhcmdldHMgeWV0LicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxJbmZvLnRhcmdldC5ub2RlICsgJ18nICsgYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXS5pbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aW1lQWNjZXNzb3JNdWx0aXBsaWVkID0ge307XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uYW5pbWF0aW9ucywgZnVuY3Rpb24gKGFuaW1hdGlvbkluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBhbmltYXRpb25JbmZvLmNoYW5uZWxzLmZpbHRlcihjaGVja0NoYW5uZWxQYXRoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2hhbm5lbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEluZm8gPSBjaGFubmVsc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSGFzaCA9IGdldENoYW5uZWxIYXNoKGNoYW5uZWxJbmZvLCBhbmltYXRpb25JbmZvKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZSA9IGxpYi5ub2Rlc1tjaGFubmVsSW5mby50YXJnZXQubm9kZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdID0gbmV3IFNhbXBsZXJUcmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhcmdldE5vZGUgPyB0YXJnZXROb2RlLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXROb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sudGFyZ2V0Tm9kZUluZGV4ID0gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLmlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVMZW4gPSB0cmFjay5jaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZnJhbWVMZW47IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZVtrXSAqPSAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBzYW1wbGVySW5mby5pbnRlcnBvbGF0aW9uIHx8ICdMSU5FQVInO1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gIT09ICdMSU5FQVInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG9ubHkgc3VwcG9ydCBMSU5FQVIgaW50ZXJwb2xhdGlvbi4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGNoYW5uZWxJbmZvLnRhcmdldC5wYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09ICd0cmFuc2xhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJ3Bvc2l0aW9uJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVsc1twYXRoXSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLm91dHB1dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrc0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaGFzaCBpbiB0cmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrc0xpc3QucHVzaCh0cmFja3NbaGFzaF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gbmV3IFRyYWNrQ2xpcCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBhbmltYXRpb25JbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHJhY2tzOiB0cmFja3NMaXN0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICB2YXIgbWF4TGlmZSA9IGxpYi5jbGlwcy5yZWR1Y2UoZnVuY3Rpb24gKG1heFRpbWUsIGNsaXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1heFRpbWUsIGNsaXAubGlmZSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgbGliLmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgY2xpcC5saWZlID0gbWF4TGlmZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpYi5jbGlwcztcclxuICAgIH1cclxufSk7XHJcblxyXG5HTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUgPSBmdW5jdGlvbiAobWVzaGVzLCBpZHgsIHByaW1pdGl2ZUlkeCkge1xyXG4gICAgdmFyIG1lc2hJbmZvID0gbWVzaGVzW2lkeF07XHJcbiAgICB2YXIgbWVzaE5hbWUgPSBtZXNoSW5mby5uYW1lIHx8ICgnbWVzaF8nICsgaWR4KTtcclxuICAgIHJldHVybiBwcmltaXRpdmVJZHggPT09IDAgPyBtZXNoTmFtZSA6IChtZXNoTmFtZSArICckJyArIHByaW1pdGl2ZUlkeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTFRGTG9hZGVyO1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBsaWdodCA9IG5ldyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsKHtcclxuICogICAgICAgICBpbnRlbnNpdHk6IDAuNSxcclxuICogICAgICAgICBjb2xvcjogWzEuMCwgMC4wLCAwLjBdXHJcbiAqICAgICB9KTtcclxuICogICAgIGxpZ2h0LnBvc2l0aW9uLnNldCgxMCwgMTAsIDEwKTtcclxuICogICAgIGxpZ2h0Lmxvb2tBdChjbGF5LlZlY3RvcjMuWkVSTyk7XHJcbiAqICAgICBzY2VuZS5hZGQobGlnaHQpO1xyXG4gKi9cclxudmFyIERpcmVjdGlvbmFsTGlnaHQgPSBMaWdodC5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIFNoYWRvdyBjYXNjYWRlLlxyXG4gICAgICogVXNlIFBTU00gdGVjaG5pcXVlIHdoZW4gaXQgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0Nhc2NhZGU6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdmFpbGFibGUgd2hlbiBzaGFkb3dDYXNjYWRlIGlzIGxhcmdlciB0aGFuIDEgYW5kIGhhdmUgYSB1bmlxdWUgZGlyZWN0aW9uYWwgbGlnaHQgaW4gc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXNjYWRlU3BsaXRMb2dGYWN0b3I6IDAuMlxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0RJUkVDVElPTkFMX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubm9ybWFsaXplKCkubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdICogaW50ZW5zaXR5LCBjb2xvclsxXSAqIGludGVuc2l0eSwgY29sb3JbMl0gKiBpbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5EaXJlY3Rpb25hbH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGlyZWN0aW9uYWxMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5Qb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgUG9pbnRMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuUG9pbnQjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnUE9JTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBwb2ludExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2ludExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlBvaW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuUG9pbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBMaWdodC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBsaWdodC5yYW5nZSA9IHRoaXMucmFuZ2U7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBvaW50TGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BvdFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgU3BvdExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKkBsZW5kcyBjbGF5LmxpZ2h0LlNwb3QgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHVtYnJhQW5nbGU6IDMwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwZW51bWJyYUFuZ2xlOiA0NSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFsbG9mZkZhY3RvcjogMi4wLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dCaWFzOiAwLjAwMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93U2xvcGVTY2FsZTogMi4wXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BPVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHNwb3RMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jb3MoaW5zdGFuY2UudW1icmFBbmdsZSAqIE1hdGguUEkgLyAxODApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodEZhbGxvZmZGYWN0b3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmZhbGxvZmZGYWN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlNwb3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5TcG90LnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICBsaWdodC51bWJyYUFuZ2xlID0gdGhpcy51bWJyYUFuZ2xlO1xyXG4gICAgICAgIGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSB0aGlzLnBlbnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQuZmFsbG9mZkZhY3RvciA9IHRoaXMuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICBsaWdodC5zaGFkb3dCaWFzID0gdGhpcy5zaGFkb3dCaWFzO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUgPSB0aGlzLnNoYWRvd1Nsb3BlU2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwb3RMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5BbWJpZW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50TGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcblxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbWJpZW50TGlnaHQ7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuXHJcbnZhciBLRVlfRlJBTUVCVUZGRVIgPSAnZnJhbWVidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUiA9ICdyZW5kZXJidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9XSURUSCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX3dpZHRoJztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUID0gS0VZX1JFTkRFUkJVRkZFUiArICdfaGVpZ2h0JztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19hdHRhY2hlZCc7XHJcbnZhciBLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEID0gJ2RlcHRodGV4dHVyZV9hdHRhY2hlZCc7XHJcblxyXG52YXIgR0xfRlJBTUVCVUZGRVIgPSBnbGVudW0uRlJBTUVCVUZGRVI7XHJcbnZhciBHTF9SRU5ERVJCVUZGRVIgPSBnbGVudW0uUkVOREVSQlVGRkVSO1xyXG52YXIgR0xfREVQVEhfQVRUQUNITUVOVCA9IGdsZW51bS5ERVBUSF9BVFRBQ0hNRU5UO1xyXG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSBnbGVudW0uQ09MT1JfQVRUQUNITUVOVDA7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5GcmFtZUJ1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZyYW1lQnVmZmVyID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlciMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB1c2UgZGVwdGggYnVmZmVyXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhCdWZmZXI6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICB2aWV3cG9ydDogbnVsbCxcclxuXHJcbiAgICBfd2lkdGg6IDAsXHJcbiAgICBfaGVpZ2h0OiAwLFxyXG5cclxuICAgIF90ZXh0dXJlczogbnVsbCxcclxuXHJcbiAgICBfYm91bmRSZW5kZXJlcjogbnVsbCxcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gVXNlIGNhY2hlXHJcbiAgICB0aGlzLl9jYWNoZSA9IG5ldyBDYWNoZSgpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcbn0sXHJcblxyXG4vKipAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlci5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogR2V0IGF0dGFjaGVkIHRleHR1cmUgd2lkdGhcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIEZJWE1FIENhbid0IHVzZSBiZWZvcmUgI2JpbmRcclxuICAgIGdldFRleHR1cmVXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSBoZWlnaHRcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRleHR1cmVIZWlnaHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmQgdGhlIGZyYW1lYnVmZmVyIHRvIGdpdmVuIHJlbmRlcmVyIGJlZm9yZSByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBib3VuZFxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZW5kZXJlciBhbHJlYWR5IGJvdW5kIHdpdGggYW5vdGhlciBmcmFtZWJ1ZmZlci4gVW5iaW5kIGl0IGZpcnN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0aGlzLl9nZXRGcmFtZUJ1ZmZlckdMKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS5wdXQoJ3ZpZXdwb3J0JywgcmVuZGVyZXIudmlld3BvcnQpO1xyXG5cclxuICAgICAgICB2YXIgaGFzVGV4dHVyZUF0dGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHdpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQ7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBoYXNUZXh0dXJlQXR0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRG8gd2lkdGgsIGhlaWdodCBjaGVja2luZywgbWFrZSBzdXJlIHNpemUgYXJlIHNhbWVcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gb2JqLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBvYmoudGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdGV4dHVyZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RvQXR0YWNoKHJlbmRlcmVyLCBvYmoudGV4dHVyZSwgYXR0YWNobWVudCwgb2JqLnRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoIWhhc1RleHR1cmVBdHRhY2hlZCAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ011c3QgYXR0YWNoIHRleHR1cmUgYmVmb3JlIGJpbmQsIG9yIHJlbmRlcmJ1ZmZlciBtYXkgaGF2ZSBpbmNvcnJlY3Qgd2lkdGggYW5kIGhlaWdodC4nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodGhpcy52aWV3cG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNhY2hlLmdldChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEKSAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZW5kZXIgYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9SRU5ERVJCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSClcclxuICAgICAgICAgICAgICAgICAgICB8fCBoZWlnaHQgIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgX2dsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX1dJRFRILCB3aWR0aCk7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmJpbmQgdGhlIGZyYW1lIGJ1ZmZlciBhZnRlciByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHN0YXR1cyByZWNvcmQgb24gcmVuZGVyZXJcclxuICAgICAgICByZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLl9jYWNoZS5nZXQoJ3ZpZXdwb3J0Jyk7XHJcbiAgICAgICAgLy8gUmVzZXQgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlTWlwbWFwKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICB1cGRhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBvYmoudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIHNvbWUgdGV4dHVyZSBmb3JtYXQgY2FuJ3QgZ2VuZXJhdGUgbWlwbWFwXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUuTlBPVCAmJiB0ZXh0dXJlLnVzZU1pcG1hcFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRleHR1cmUubWluRmlsdGVyID09PSBUZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmUudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScgPyBnbGVudW0uVEVYVFVSRV9DVUJFX01BUCA6IGdsZW51bS5URVhUVVJFXzJEO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyAweDhDRDUsIDM2MDUzLCBGUkFNRUJVRkZFUl9DT01QTEVURVxyXG4gICAgLy8gMHg4Q0Q2LCAzNjA1NCwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDcsIDM2MDU1LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVFxyXG4gICAgLy8gMHg4Q0Q5LCAzNjA1NywgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TXHJcbiAgICAvLyAweDhDREQsIDM2MDYxLCBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFxyXG4gICAgY2hlY2tTdGF0dXM6IGZ1bmN0aW9uIChfZ2wpIHtcclxuICAgICAgICByZXR1cm4gX2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RnJhbWVCdWZmZXJHTDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfRlJBTUVCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfRlJBTUVCVUZGRVIsIHJlbmRlcmVyLmdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHRleHR1cmUoUlRUKSB0byB0aGUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBhdHRhY2g6IGZ1bmN0aW9uICh0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLndpZHRoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gY29sb3IgYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHdpZHRoIGFuZCBoZWlnaHQgY2hlY2tcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGRlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQsIGRldmVsb3BlcnNcclxuICAgICAgICAvLyBDYW4gYXR0YWNoIGEgZGVwdGggdGV4dHVyZSB0byB0aGUgZGVwdGggYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cDovL2Jsb2cudG9qaWNvZGUuY29tLzIwMTIvMDcvdXNpbmctd2ViZ2xkZXB0aHRleHR1cmUuaHRtbFxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kUmVuZGVyZXIgPSB0aGlzLl9ib3VuZFJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBfZ2wgPSBib3VuZFJlbmRlcmVyICYmIGJvdW5kUmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXM7XHJcblxyXG4gICAgICAgIGlmIChfZ2wpIHtcclxuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgICAgIGNhY2hlLnVzZShib3VuZFJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhdHRhY2hlZFxyXG4gICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy50YXJnZXQgPT09IHRhcmdldFxyXG4gICAgICAgICAgICAmJiBwcmV2aW91cy50ZXh0dXJlID09PSB0ZXh0dXJlXHJcbiAgICAgICAgICAgICYmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gIT0gbnVsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJvdW5kUmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY2FuQXR0YWNoID0gdGhpcy5fZG9BdHRhY2goYm91bmRSZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgLy8gU2V0IHZpZXdwb3J0IGFnYWluIGluY2FzZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgc2l6ZSB0ZXh0dXJlcy5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBib3VuZFJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0udGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2RvQXR0YWNoOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdGV4dHVyZSBpcyBhbHdheXMgdXBkYXRlZFxyXG4gICAgICAgIC8vIEJlY2F1c2UgdGV4dHVyZSB3aWR0aCBvciBoZWlnaHQgbWF5IGJlIGNoYW5nZWQgYW5kIGluIHRoaXMgd2UgY2FuJ3QgYmUgbm90aWZpZWRcclxuICAgICAgICAvLyBGSVhNRSBhd2t3YXJkO1xyXG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSB0ZXh0dXJlLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhbmQgdGFyZ2V0IG5vdCBjaGFuZ2VkXHJcbiAgICAgICAgICAgIGlmIChvYmoudGV4dHVyZSA9PT0gdGV4dHVyZSAmJiBvYmoudGFyZ2V0ID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRhY2htZW50ID0gK2F0dGFjaG1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBjYW5BdHRhY2ggPSB0cnVlO1xyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdXRUJHTF9kZXB0aF90ZXh0dXJlJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGVwdGggdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyJyk7XHJcbiAgICAgICAgICAgICAgICBjYW5BdHRhY2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9DT01QT05FTlRcclxuICAgICAgICAgICAgICAgICYmIHRleHR1cmUuZm9ybWF0ICE9PSBnbGVudW0uREVQVEhfU1RFTkNJTFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSB0ZXh0dXJlIGF0dGFjaGVkIHRvIGRlcHRoIGJ1ZmZlciBpcyBub3QgYSB2YWxpZC4nKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHJlbmRlciBidWZmZXIgY3JlYXRlZCBwcmV2aW91c1xyXG4gICAgICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gdGhpcy5fY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgY2FuIG9ubHkgYmUgMFxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCB3ZWJnbFRleHR1cmUsIDApO1xyXG5cclxuICAgICAgICBpZiAoIWF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoJ2F0dGFjaGVkX3RleHR1cmVzJywgYXR0YWNoZWRUZXh0dXJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0udGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW5BdHRhY2g7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb0RldGFjaDogZnVuY3Rpb24gKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gRGV0YWNoIGEgdGV4dHVyZSBmcm9tIGZyYW1lYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9XZWJHTC9ibG9iL21hc3Rlci9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjAvY29uZm9ybWFuY2UvZnJhbWVidWZmZXItdGVzdC5odG1sI0wxNDVcclxuICAgICAgICBfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIHRhcmdldCwgbnVsbCwgMCk7XHJcblxyXG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gdGhpcy5fY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0pIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBhIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW2F0dGFjaG1lbnQ9Z2wuQ09MT1JfQVRUQUNITUVOVDBdXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt0YXJnZXQ9Z2wuVEVYVFVSRV8yRF1cclxuICAgICAqL1xyXG4gICAgZGV0YWNoOiBmdW5jdGlvbiAoYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gVE9ETyBkZXB0aCBleHRlbnNpb24gY2hlY2sgP1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5fYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKHRoaXMuX2JvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKHRoaXMuX2JvdW5kUmVuZGVyZXIuZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZVxyXG4gICAgICogQHBhcmFtICB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBfZ2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgIGlmIChyZW5kZXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX0ZSQU1FQlVGRkVSKTtcclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgY2FjaGUgZm9yIHJldXNpbmdcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG5cclxuICAgIH1cclxufSk7XHJcblxyXG5GcmFtZUJ1ZmZlci5ERVBUSF9BVFRBQ0hNRU5UID0gR0xfREVQVEhfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDAgPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDtcclxuRnJhbWVCdWZmZXIuU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLlNURU5DSUxfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZyYW1lQnVmZmVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZXJ0ZXhHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci92ZXJ0ZXguZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKHZlcnRleEdsc2wpO1xyXG5cclxudmFyIHBsYW5lR2VvID0gbmV3IFBsYW5lKCk7XHJcbnZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgZ2VvbWV0cnk6IHBsYW5lR2VvLFxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcbn0pO1xyXG52YXIgY2FtZXJhID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5QYXNzXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUGFzcyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnJhZ21lbnQgc2hhZGVyIHN0cmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gUEVORElORyBzaGFkZXIgb3IgZnJhZ21lbnQgP1xyXG4gICAgICAgIGZyYWdtZW50OiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRlcmlhbH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmRXaXRoUHJldmlvdXM6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckNvbG9yOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJEZXB0aDogdHJ1ZVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpLCB0aGlzLmZyYWdtZW50KTtcclxuICAgIHZhciBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXJcclxuICAgIH0pO1xyXG4gICAgbWF0ZXJpYWwuZW5hYmxlVGV4dHVyZXNBbGwoKTtcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcblxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMubWF0ZXJpYWwudW5pZm9ybXNbbmFtZV07XHJcbiAgICAgICAgaWYgKHVuaWZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGF0dGFjaG1lbnRcclxuICAgICAqL1xyXG4gICAgYXR0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlLCBhdHRhY2htZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXRzID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICB0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRldGFjaE91dHB1dDogZnVuY3Rpb24odGV4dHVyZSkge1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPT09IHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMub3V0cHV0c1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcmFtZUJ1ZmZlcn0gW2ZyYW1lQnVmZmVyXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICAgICAgLy8gTVJUIFN1cHBvcnQgaW4gY2hyb21lXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxyXG4gICAgICAgICAgICB2YXIgZXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9kcmF3X2J1ZmZlcnMnKTtcclxuICAgICAgICAgICAgaWYgKGV4dCAmJiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGSVhNRSBEb24ndCBjbGVhciBpbiBlYWNoIHBhc3MgaW4gZGVmYXVsdCwgbGV0IHRoZSBjb2xvciBvdmVyd3JpdGUgdGhlIGJ1ZmZlclxyXG4gICAgICAgIC8vIEZJWE1FIHBpeGVscyBtYXkgYmUgZGlzY2FyZFxyXG4gICAgICAgIHZhciBjbGVhckJpdCA9IHRoaXMuY2xlYXJEZXB0aCA/IF9nbC5ERVBUSF9CVUZGRVJfQklUIDogMDtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQ29sb3IpIHtcclxuICAgICAgICAgICAgY2xlYXJCaXQgPSBjbGVhckJpdCB8IF9nbC5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgY2MgPSB0aGlzLmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNjKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNsZWFyQ29sb3IoY2NbMF0sIGNjWzFdLCBjY1syXSwgY2NbM10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9nbC5jbGVhcihjbGVhckJpdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJsZW5kV2l0aFByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgIC8vIEJsZW5kIHdpdGggcHJldmlvdXMgcmVuZGVyZWQgc2NlbmUgaW4gdGhlIGZpbmFsIG91dHB1dFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBDb25maWd1cmUgYmxlbmQuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIEl0IHdpbGwgY2F1c2Ugc2NyZWVuIGJsaW5r77yfXHJcbiAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy51bmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2ltcGx5IGRvIHF1YWQgcmVuZGVyaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbmRlclF1YWQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW21lc2hdLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXNzO1xyXG4iLCIvLyBUT0RPIFNob3VsZCBub3QgZGVyaXZlZCBmcm9tIG1lc2g/XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgQ3ViZUdlb21ldHJ5IGZyb20gJy4uL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbmltcG9ydCBza3lib3hFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KHNreWJveEVzc2wpO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLlNreWJveFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNreVRleCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBza3lUZXgubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgc2t5Ym94ID0gbmV3IGNsYXkucGx1Z2luLlNreWJveCh7XHJcbiAqICAgICAgICAgc2NlbmU6IHNjZW5lXHJcbiAqICAgICB9KTtcclxuICogICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgc2t5VGV4KTtcclxuICovXHJcbnZhciBTa3lib3ggPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHNreWJveFNoYWRlciA9IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JylcclxuICAgIH0pO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNreWJveFNoYWRlcixcclxuICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnBsdWdpbi5Ta3lib3gucHJvdG90eXBlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2NlbmU6IG51bGwsXHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ3ViZUdlb21ldHJ5KCksXHJcblxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZHVtbXlDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hTY2VuZShzY2VuZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudE1hcCkge1xyXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRNYXAodGhpcy5lbnZpcm9ubWVudE1hcCk7XHJcbiAgICB9XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uU2t5Ym94IyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCB0aGUgc2t5Ym94IHRvIHRoZSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgYXR0YWNoU2NlbmU6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUuc2t5Ym94ID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHNjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSwgdGhpcyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRhY2ggZnJvbSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUub2ZmKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5Ym94ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBza3lib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGVudmlyb25tZW50IG1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmVDdWJlfSBlbnZNYXBcclxuICAgICAqL1xyXG4gICAgc2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uIChlbnZNYXApIHtcclxuICAgICAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgICAgIC8vIExJTkVBUiBmaWx0ZXIgY2FuIHJlbW92ZSB0aGUgYXJ0aWZhY3RzIGluIHBvbGVcclxuICAgICAgICAgICAgZW52TWFwLm1pbkZpbHRlciA9IFRleHR1cmUuTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICovXHJcbiAgICBnZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsLmdldCgnZW52aXJvbm1lbnRNYXAnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2JlZm9yZVJlbmRlclNjZW5lOiBmdW5jdGlvbihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyU2t5Ym94KHJlbmRlcmVyLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJTa3lib3g6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGR1bW15Q2FtZXJhID0gdGhpcy5fZHVtbXlDYW1lcmE7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEuYXNwZWN0ID0gcmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgICAgICBkdW1teUNhbWVyYS5mb3YgPSBjYW1lcmEuZm92IHx8IDUwO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBNYXRyaXg0LmludmVydChkdW1teUNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4LCBkdW1teUNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBkdW1teUNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudmlld01hdHJpeC5jb3B5KGNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIC8vIERvbid0IHJlbWVtYmVyIHRvIGRpc2FibGUgYmxlbmRcclxuICAgICAgICByZW5kZXJlci5nbC5kaXNhYmxlKHJlbmRlcmVyLmdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC5nZXQoJ2xvZCcpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTE9EJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpc10sIGR1bW15Q2FtZXJhKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa3lib3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vKipcclxuICogUGFzcyByZW5kZXJpbmcgc2NlbmUgdG8gYSBlbnZpcm9ubWVudCBjdWJlIG1hcFxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBFeGFtcGxlIG9mIGNhciByZWZsZWN0aW9uXHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgICAgIHdpZHRoOiAyNTYsXHJcbiAqICAgICAgICAgaGVpZ2h0OiAyNTZcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudlBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwKHtcclxuICogICAgICAgICBwb3NpdGlvbjogY2FyLnBvc2l0aW9uLFxyXG4gKiAgICAgICAgIHRleHR1cmU6IGVudk1hcFxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgY2FyQm9keSA9IGNhci5nZXRDaGlsZEJ5TmFtZSgnYm9keScpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGVudlBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRW52aXJvbm1lbnRNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgcmV0ID0gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIGZhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBmYXI6IDEwMDAsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmVhcjogMC4xLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIGlmIHlvdSB3YW4ndCBoYXZlIHNoYWRvdyBpbiBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgfTtcclxuICAgIHZhciBjYW1lcmFzID0gcmV0Ll9jYW1lcmFzID0ge1xyXG4gICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pXHJcbiAgICB9O1xyXG4gICAgY2FtZXJhcy5weC5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5ueC5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5weS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5ueS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5wei5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5uei5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG5cclxuICAgIC8vIEZJWE1FIEluIHdpbmRvd3MsIHVzZSBvbmUgZnJhbWVidWZmZXIgb25seSByZW5kZXJzIG9uZSBzaWRlIG9mIGN1YmVtYXBcclxuICAgIHJldC5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG59LCAgLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB0YXJnZXRcclxuICAgICAqIEByZXR1cm4gIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FtZXJhOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHdlYWsgZm92XHJcbiAgICAgICAgLy8gaHR0cDovL3RoZS13aXRuZXNzLm5ldC9uZXdzLzIwMTIvMDIvc2VhbWxlc3MtY3ViZS1tYXAtZmlsdGVyaW5nL1xyXG4gICAgICAgIHZhciBuID0gdGhpcy50ZXh0dXJlLndpZHRoO1xyXG4gICAgICAgIHZhciBmb3YgPSAyICogTWF0aC5hdGFuKG4gLyAobiAtIDAuNSkpIC8gTWF0aC5QSSAqIDE4MDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9jYW1lcmFzW3RhcmdldF07XHJcbiAgICAgICAgICAgIFZlY3RvcjMuY29weShjYW1lcmEucG9zaXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG5cclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvd01hcFBhc3MpIHtcclxuICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYm91bmRpbmdCb3hMYXN0RnJhbWVcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIGJib3guYXBwbHlUcmFuc2Zvcm0oY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLmNvcHkoYmJveCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsXHJcbiAgICAgICAgICAgICAgICBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnRNYXBQYXNzO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5cclxuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjk0Mzk5MSh2PXZzLjg1KS5hc3B4XHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL3dlYmdsLXRleHR1cmUtdXRpbHMvYmxvYi9tYXN0ZXIvdGV4dHVyZS11dGlsL2Rkcy5qc1xyXG52YXIgRERTX01BR0lDID0gMHgyMDUzNDQ0NDtcclxuXHJcbnZhciBERFNEX0NBUFMgPSAweDE7XHJcbnZhciBERFNEX0hFSUdIVCA9IDB4MjtcclxudmFyIEREU0RfV0lEVEggPSAweDQ7XHJcbnZhciBERFNEX1BJVENIID0gMHg4O1xyXG52YXIgRERTRF9QSVhFTEZPUk1BVCA9IDB4MTAwMDtcclxudmFyIEREU0RfTUlQTUFQQ09VTlQgPSAweDIwMDAwO1xyXG52YXIgRERTRF9MSU5FQVJTSVpFID0gMHg4MDAwMDtcclxudmFyIEREU0RfREVQVEggPSAweDgwMDAwMDtcclxuXHJcbnZhciBERFNDQVBTX0NPTVBMRVggPSAweDg7XHJcbnZhciBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwO1xyXG52YXIgRERTQ0FQU19URVhUVVJFID0gMHgxMDAwO1xyXG5cclxudmFyIEREU0NBUFMyX0NVQkVNQVAgPSAweDIwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVYID0gMHg0MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWCA9IDB4ODAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVkgPSAweDEwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWSA9IDB4MjAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVaID0gMHg0MDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVogPSAweDgwMDA7XHJcbnZhciBERFNDQVBTMl9WT0xVTUUgPSAweDIwMDAwMDtcclxuXHJcbnZhciBERFBGX0FMUEhBUElYRUxTID0gMHgxO1xyXG52YXIgRERQRl9BTFBIQSA9IDB4MjtcclxudmFyIEREUEZfRk9VUkNDID0gMHg0O1xyXG52YXIgRERQRl9SR0IgPSAweDQwO1xyXG52YXIgRERQRl9ZVVYgPSAweDIwMDtcclxudmFyIEREUEZfTFVNSU5BTkNFID0gMHgyMDAwMDtcclxuXHJcbmZ1bmN0aW9uIGZvdXJDQ1RvSW50MzIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KDApICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgxKSA8PCA4KSArXHJcbiAgICAgICAgKHZhbHVlLmNoYXJDb2RlQXQoMikgPDwgMTYpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgzKSA8PCAyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludDMyVG9Gb3VyQ0ModmFsdWUpIHtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxyXG4gICAgICAgIHZhbHVlICYgMHhmZixcclxuICAgICAgICAodmFsdWUgPj4gOCkgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAxNikgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAyNCkgJiAweGZmXHJcbiAgICApO1xyXG59XHJcblxyXG52YXIgaGVhZGVyTGVuZ3RoSW50ID0gMzE7IC8vIFRoZSBoZWFkZXIgbGVuZ3RoIGluIDMyIGJpdCBpbnRzXHJcblxyXG52YXIgRk9VUkNDX0RYVDEgPSBmb3VyQ0NUb0ludDMyKCdEWFQxJyk7XHJcbnZhciBGT1VSQ0NfRFhUMyA9IGZvdXJDQ1RvSW50MzIoJ0RYVDMnKTtcclxudmFyIEZPVVJDQ19EWFQ1ID0gZm91ckNDVG9JbnQzMignRFhUNScpO1xyXG4vLyBPZmZzZXRzIGludG8gdGhlIGhlYWRlciBhcnJheVxyXG52YXIgb2ZmX21hZ2ljID0gMDtcclxuXHJcbnZhciBvZmZfc2l6ZSA9IDE7XHJcbnZhciBvZmZfZmxhZ3MgPSAyO1xyXG52YXIgb2ZmX2hlaWdodCA9IDM7XHJcbnZhciBvZmZfd2lkdGggPSA0O1xyXG5cclxudmFyIG9mZl9taXBtYXBDb3VudCA9IDc7XHJcblxyXG52YXIgb2ZmX3BmRmxhZ3MgPSAyMDtcclxudmFyIG9mZl9wZkZvdXJDQyA9IDIxO1xyXG5cclxudmFyIG9mZl9jYXBzID0gMjc7XHJcbnZhciBvZmZfY2FwczIgPSAyODtcclxudmFyIG9mZl9jYXBzMyA9IDI5O1xyXG52YXIgb2ZmX2NhcHM0ID0gMzA7XHJcblxyXG52YXIgcmV0ID0ge1xyXG4gICAgcGFyc2U6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCBvdXQpIHtcclxuICAgICAgICB2YXIgaGVhZGVyID0gbmV3IEludDMyQXJyYXkoYXJyYXlCdWZmZXIsIDAsIGhlYWRlckxlbmd0aEludCk7XHJcbiAgICAgICAgaWYgKGhlYWRlcltvZmZfbWFnaWNdICE9PSBERFNfTUFHSUMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGVhZGVyKG9mZl9wZkZsYWdzKSAmIEREUEZfRk9VUkNDKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZvdXJDQyA9IGhlYWRlcihvZmZfcGZGb3VyQ0MpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IGhlYWRlcltvZmZfd2lkdGhdO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBoZWFkZXJbb2ZmX2hlaWdodF07XHJcbiAgICAgICAgdmFyIGlzQ3ViZU1hcCA9IGhlYWRlcltvZmZfY2FwczJdICYgRERTQ0FQUzJfQ1VCRU1BUDtcclxuICAgICAgICB2YXIgaGFzTWlwbWFwID0gaGVhZGVyW29mZl9mbGFnc10gJiBERFNEX01JUE1BUENPVU5UO1xyXG4gICAgICAgIHZhciBibG9ja0J5dGVzLCBpbnRlcm5hbEZvcm1hdDtcclxuICAgICAgICBzd2l0Y2goZm91ckNDKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDE6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gODtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDM6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUNTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhT2Zmc2V0ID0gaGVhZGVyW29mZl9zaXplXSArIDQ7XHJcbiAgICAgICAgLy8gVE9ETzogU3VwcG9zZSBhbGwgZmFjZSBhcmUgZXhpc3RlZFxyXG4gICAgICAgIHZhciBmYWNlTnVtYmVyID0gaXNDdWJlTWFwID8gNiA6IDE7XHJcbiAgICAgICAgdmFyIG1pcG1hcENvdW50ID0gMTtcclxuICAgICAgICBpZiAoaGFzTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3VudF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBmYWNlTnVtYmVyOyBmKyspIHtcclxuICAgICAgICAgICAgdmFyIF93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB2YXIgX2hlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0gPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBfd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGludGVybmFsRm9ybWF0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgbWlwbWFwcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhTGVuZ3RoID0gTWF0aC5tYXgoNCwgX3dpZHRoKSAvIDQgKiBNYXRoLm1heCg0LCBfaGVpZ2h0KSAvIDQgKiBibG9ja0J5dGVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IGRhdGFMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBfd2lkdGggKj0gMC41O1xyXG4gICAgICAgICAgICAgICAgX2hlaWdodCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBtaXBtYXBzW2ldID0gYnl0ZUFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmVzW2ZdLnBpeGVscyA9IG1pcG1hcHNbMF07XHJcbiAgICAgICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzW2ZdLm1pcG1hcHMgPSBtaXBtYXBzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyByZXR1cm4gaXNDdWJlTWFwID8gdGV4dHVyZXMgOiB0ZXh0dXJlc1swXTtcclxuICAgICAgICBpZiAob3V0KSB7XHJcbiAgICAgICAgICAgIG91dC53aWR0aCA9IHRleHR1cmVzWzBdLndpZHRoO1xyXG4gICAgICAgICAgICBvdXQuaGVpZ2h0ID0gdGV4dHVyZXNbMF0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBvdXQuZm9ybWF0ID0gdGV4dHVyZXNbMF0uZm9ybWF0O1xyXG4gICAgICAgICAgICBvdXQucGl4ZWxzID0gdGV4dHVyZXNbMF0ucGl4ZWxzO1xyXG4gICAgICAgICAgICBvdXQubWlwbWFwcyA9IHRleHR1cmVzWzBdLm1pcG1hcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG52YXIgdG9DaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcclxuXHJcbnZhciBNSU5FTEVOID0gODtcclxudmFyIE1BWEVMRU4gPSAweDdmZmY7XHJcbmZ1bmN0aW9uIHJnYmUyZmxvYXQocmdiZSwgYnVmZmVyLCBvZmZzZXQsIGV4cG9zdXJlKSB7XHJcbiAgICBpZiAocmdiZVszXSA+IDApIHtcclxuICAgICAgICB2YXIgZiA9IE1hdGgucG93KDIuMCwgcmdiZVszXSAtIDEyOCAtIDggKyBleHBvc3VyZSk7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDBdID0gcmdiZVswXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gcmdiZVsxXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gcmdiZVsyXSAqIGY7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSAwO1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gMDtcclxuICAgIH1cclxuICAgIGJ1ZmZlcltvZmZzZXQgKyAzXSA9IDEuMDtcclxuICAgIHJldHVybiBidWZmZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVpbnQ4MnN0cmluZyhhcnJheSwgb2Zmc2V0LCBzaXplKSB7XHJcbiAgICB2YXIgc3RyID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgc3RyICs9IHRvQ2hhcihhcnJheVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5cmdiZShzLCB0KSB7XHJcbiAgICB0WzBdID0gc1swXTtcclxuICAgIHRbMV0gPSBzWzFdO1xyXG4gICAgdFsyXSA9IHNbMl07XHJcbiAgICB0WzNdID0gc1szXTtcclxufVxyXG5cclxuLy8gVE9ETyA6IGNoZWNrXHJcbmZ1bmN0aW9uIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIHZhciByc2hpZnQgPSAwLCB4ID0gMCwgbGVuID0geG1heDtcclxuICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcbiAgICAgICAgc2Nhblt4XVswXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsyXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVszXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgaWYgKHNjYW5beF1bMF0gPT09IDEgJiYgc2Nhblt4XVsxXSA9PT0gMSAmJiBzY2FuW3hdWzJdID09PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGV4cCBpcyBjb3VudCBvZiByZXBlYXRlZCBwaXhlbHNcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IChzY2FuW3hdWzNdIDw8IHJzaGlmdCkgPj4+IDA7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvcHlyZ2JlKHNjYW5beC0xXSwgc2Nhblt4XSk7XHJcbiAgICAgICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByc2hpZnQgKz0gODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICByc2hpZnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIGlmICgoeG1heCA8IE1JTkVMRU4pIHwgKHhtYXggPiBNQVhFTEVOKSkge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0LCB4bWF4KTtcclxuICAgIH1cclxuICAgIHZhciBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmIChpICE9IDIpIHtcclxuICAgICAgICByZXR1cm4gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCAtIDEsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgc2NhblswXVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICBzY2FuWzBdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuXHJcbiAgICBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmICgoKChzY2FuWzBdWzJdIDw8IDgpID4+PiAwKSB8IGkpID4+PiAwICE9PSB4bWF4KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgeG1heDspIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA+IDEyOCkge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IChjb2RlICYgMTI3KSA+Pj4gMDtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2FuW3grK11baV0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICAvLyBodHRwOi8vd3d3LmdyYXBoaWNzLmNvcm5lbGwuZWR1L35iancvcmdiZS5odG1sXHJcbiAgICAvLyBCbGVuZGVyIHNvdXJjZVxyXG4gICAgLy8gaHR0cDovL3JhZHNpdGUubGJsLmdvdi9yYWRpYW5jZS9yZWZlci9Ob3Rlcy9waWN0dXJlX2Zvcm1hdC5odG1sXHJcbiAgICBwYXJzZVJHQkU6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCB0ZXh0dXJlLCBleHBvc3VyZSkge1xyXG4gICAgICAgIGlmIChleHBvc3VyZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICAgICAgdmFyIHNpemUgPSBkYXRhLmxlbmd0aDtcclxuICAgICAgICBpZiAodWludDgyc3RyaW5nKGRhdGEsIDAsIDIpICE9PSAnIz8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCBlbXB0eSBsaW5lLCBuZXh0IGxpbmUgaXMgcmVzb2x1dGlvbiBpbmZvXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRvQ2hhcihkYXRhW2ldKSA9PT0gJ1xcbicgJiYgdG9DaGFyKGRhdGFbaSsxXSkgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA+PSBzaXplKSB7IC8vIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbmQgcmVzb2x1dGlvbiBpbmZvIGxpbmVcclxuICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgdmFyIHN0ciA9ICcnO1xyXG4gICAgICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBfY2hhciA9IHRvQ2hhcihkYXRhW2ldKTtcclxuICAgICAgICAgICAgaWYgKF9jaGFyID09PSAnXFxuJykge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RyICs9IF9jaGFyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAtWSBNICtYIE5cclxuICAgICAgICB2YXIgdG1wID0gc3RyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KHRtcFsxXSk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcGFyc2VJbnQodG1wWzNdKTtcclxuICAgICAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVhZCBhbmQgZGVjb2RlIGFjdHVhbCBkYXRhXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGkrMTtcclxuICAgICAgICB2YXIgc2NhbmxpbmUgPSBbXTtcclxuICAgICAgICAvLyBtZW16ZXJvXHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcbiAgICAgICAgICAgIHNjYW5saW5lW3hdID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FubGluZVt4XVtqXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgb2Zmc2V0MiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZENvbG9ycyhzY2FubGluZSwgZGF0YSwgb2Zmc2V0LCB3aWR0aCk7XHJcbiAgICAgICAgICAgIGlmICghb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHJnYmUyZmxvYXQoc2NhbmxpbmVbeF0sIHBpeGVscywgb2Zmc2V0MiwgZXhwb3N1cmUpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0MiArPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRleHR1cmUucGl4ZWxzID0gcGl4ZWxzO1xyXG4gICAgICAgIC8vIEhBTEZfRkxPQVQgY2FuJ3QgdXNlIEZsb2F0MzJBcnJheVxyXG4gICAgICAgIHRleHR1cmUudHlwZSA9IFRleHR1cmUuRkxPQVQ7XHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhcnNlUkdCRUZyb21QTkc6IGZ1bmN0aW9uKHBuZykge1xyXG5cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHJldDtcclxuIiwiaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwUGFzcyBmcm9tICcuLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5cclxuaW1wb3J0IGRkcyBmcm9tICcuL2Rkcyc7XHJcbmltcG9ydCBoZHIgZnJvbSAnLi9oZHInO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudGV4dHVyZVxyXG4gKi9cclxudmFyIHRleHR1cmVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8b2JqZWN0fSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9IFtvcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uc3VjY2Vzc11cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25lcnJvcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZX1cclxuICAgICAqL1xyXG4gICAgbG9hZFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlO1xyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mKHBhdGgpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAocGF0aC5tYXRjaCgvLmhkciQvKSB8fCBvcHRpb24uZmlsZVR5cGUgPT09ICdoZHInKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNSR0I6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVVdGlsLl9mZXRjaFRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZHIucGFyc2VSR0JFKGRhdGEsIHRleHR1cmUsIG9wdGlvbi5leHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2Vzcyh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLm1hdGNoKC8uZGRzJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2RkcycpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkcy5wYXJzZShkYXRhLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3Mob25zdWNjZXNzKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmIHR5cGVvZihwYXRoLnB4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKG9uZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkIGEgcGFub3JhbWEgdGV4dHVyZSBhbmQgcmVuZGVyIGl0IHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb24uZW5jb2RlUkdCTV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW29wdGlvbi5leHBvc3VyZV1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICovXHJcbiAgICBsb2FkUGFub3JhbWE6IGZ1bmN0aW9uIChyZW5kZXJlciwgcGF0aCwgY3ViZU1hcCwgb3B0aW9uLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZVV0aWwubG9hZFRleHR1cmUocGF0aCwgb3B0aW9uLCBmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHRleHR1cmUuZmxpcFkgPSBvcHRpb24uZmxpcFkgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGYucGFub3JhbWFUb0N1YmVNYXAocmVuZGVyZXIsIHRleHR1cmUsIGN1YmVNYXAsIG9wdGlvbik7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoY3ViZU1hcCk7XHJcbiAgICAgICAgfSwgb25lcnJvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgcGFub3JhbWEgdGV4dHVyZSB0byBhIGN1YmUgbWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IHBhbm9yYW1hTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvblxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICovXHJcbiAgICBwYW5vcmFtYVRvQ3ViZU1hcDogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYW5vcmFtYU1hcCwgY3ViZU1hcCwgb3B0aW9uKSB7XHJcbiAgICAgICAgdmFyIGVudmlyb25tZW50TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3MoKTtcclxuICAgICAgICB2YXIgc2t5ZG9tZSA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IG5ldyBTY2VuZSgpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2t5ZG9tZS5zZXRFbnZpcm9ubWVudE1hcChwYW5vcmFtYU1hcCk7XHJcblxyXG4gICAgICAgIG9wdGlvbiA9IG9wdGlvbiB8fCB7fTtcclxuICAgICAgICBpZiAob3B0aW9uLmVuY29kZVJHQk0pIHtcclxuICAgICAgICAgICAgc2t5ZG9tZS5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaGFyZSBzUkdCXHJcbiAgICAgICAgY3ViZU1hcC5zUkdCID0gcGFub3JhbWFNYXAuc1JHQjtcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBjdWJlTWFwO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNreWRvbWUuc2NlbmUpO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgcmV0dXJuIGN1YmVNYXA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRUb05vcm1hbDogZnVuY3Rpb24gKGltYWdlLCBjaGVja0J1bXApIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGNoZWNrQnVtcCA9IGNoZWNrQnVtcCB8fCBmYWxzZTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgdmFyIGRzdERhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjRGF0YS5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVja0J1bXApIHtcclxuICAgICAgICAgICAgICAgIHZhciByID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhyIC0gZykgKyBNYXRoLmFicyhnIC0gYik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA+IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHaXZlbiBpbWFnZSBpcyBub3QgYSBoZWlnaHQgbWFwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIE1vZGlmaWVkIGZyb20gaHR0cDovL21yZG9vYi5jb20vbGFiL2phdmFzY3JpcHQvaGVpZ2h0Mm5vcm1hbC9cclxuICAgICAgICAgICAgdmFyIHgxLCB5MSwgeDIsIHkyO1xyXG4gICAgICAgICAgICBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZWZ0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgJSAod2lkdGggKiA0KSA9PT0gKHdpZHRoIC0gMSkgKiA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyByaWdodCBlZGdlXHJcbiAgICAgICAgICAgICAgICB4MSA9IHNyY0RhdGEuZGF0YVtpIC0gNF07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2kgKyA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGkgPCB3aWR0aCAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvcCBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPiB3aWR0aCAqIChoZWlnaHQgLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeTEgPSBzcmNEYXRhLmRhdGFbaSAtIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgICAgICB5MiA9IHNyY0RhdGEuZGF0YVtpICsgd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2ldID0gKHgxIC0geDIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDFdID0gKHkxIC0geTIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDJdID0gMjU1O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDNdID0gMjU1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGRzdERhdGEsIDAsIDApO1xyXG4gICAgICAgIHJldHVybiBjYW52YXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGhyZXNob2xkPTIwXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGlzSGVpZ2h0SW1hZ2U6IGZ1bmN0aW9uIChpbWcsIGRvd25TY2FsZVNpemUsIHRocmVzaG9sZCkge1xyXG4gICAgICAgIGlmICghaW1nIHx8ICFpbWcud2lkdGggfHwgIWltZy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRvd25TY2FsZVNpemUgfHwgMzI7XHJcbiAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIHx8IDIwO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIHZhciBnID0gc3JjRGF0YS5kYXRhW2kgKyAxXTtcclxuICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgaWYgKGRpZmYgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2ZldGNoVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgb25lcnJvcjogb25lcnJvclxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGNoZXNzYm9hcmQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbc2l6ZV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3VuaXRTaXplXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IxXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNoZXNzYm9hcmQ6IGZ1bmN0aW9uIChzaXplLCB1bml0U2l6ZSwgY29sb3IxLCBjb2xvcjIpIHtcclxuICAgICAgICBzaXplID0gc2l6ZSB8fCA1MTI7XHJcbiAgICAgICAgdW5pdFNpemUgPSB1bml0U2l6ZSB8fCA2NDtcclxuICAgICAgICBjb2xvcjEgPSBjb2xvcjEgfHwgJ2JsYWNrJztcclxuICAgICAgICBjb2xvcjIgPSBjb2xvcjIgfHwgJ3doaXRlJztcclxuXHJcbiAgICAgICAgdmFyIHJlcGVhdCA9IE1hdGguY2VpbChzaXplIC8gdW5pdFNpemUpO1xyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gc2l6ZTtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcblxyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcGVhdDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNGaWxsID0gaiAlIDIgPyAoaSAlIDIpIDogKGkgJSAyIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KGkgKiB1bml0U2l6ZSwgaiAqIHVuaXRTaXplLCB1bml0U2l6ZSwgdW5pdFNpemUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzLFxyXG4gICAgICAgICAgICBhbmlzb3Ryb3BpYzogOFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBibGFuayBwdXJlIGNvbG9yIDF4MSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNvbG9yXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQmxhbms6IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSAxO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XHJcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdGV4dHVyZVV0aWw7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxEaXN0cmlidXRpb247XFxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZSA6IFs1MTIsIDI1Nl07XFxuY29uc3QgdmVjMyBOID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcXG5jb25zdCBmbG9hdCBmU2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxudmVjMyBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0IGksIGZsb2F0IHJvdWdobmVzcywgdmVjMyBOKSB7XFxuIHZlYzMgSCA9IHRleHR1cmUyRChub3JtYWxEaXN0cmlidXRpb24sIHZlYzIocm91Z2huZXNzLCBpKSkucmdiO1xcbiB2ZWMzIHVwVmVjdG9yID0gYWJzKE4ueSkgPiAwLjk5OSA/IHZlYzMoMS4wLCAwLjAsIDAuMCkgOiB2ZWMzKDAuMCwgMS4wLCAwLjApO1xcbiB2ZWMzIHRhbmdlbnRYID0gbm9ybWFsaXplKGNyb3NzKE4sIHVwVmVjdG9yKSk7XFxuIHZlYzMgdGFuZ2VudFogPSBjcm9zcyhOLCB0YW5nZW50WCk7XFxuIHJldHVybiBub3JtYWxpemUodGFuZ2VudFggKiBILnggKyBOICogSC55ICsgdGFuZ2VudFogKiBILnopO1xcbn1cXG5mbG9hdCBHX1NtaXRoKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gTm9WIC8gKE5vViAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBOb0wgLyAoTm9MICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHZpZXdwb3J0U2l6ZTtcXG4gZmxvYXQgTm9WID0gdXYueDtcXG4gZmxvYXQgcm91Z2huZXNzID0gdXYueTtcXG4gdmVjMyBWO1xcbiBWLnggPSBzcXJ0KDEuMCAtIE5vViAqIE5vVik7XFxuIFYueSA9IDAuMDtcXG4gVi56ID0gTm9WO1xcbiBmbG9hdCBBID0gMC4wO1xcbiBmbG9hdCBCID0gMC4wO1xcbiBmb3IgKGludCBpID0gMDsgaSA8IFNBTVBMRV9OVU1CRVI7IGkrKykge1xcbiB2ZWMzIEggPSBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0KGkpIC8gZlNhbXBsZU51bWJlciwgcm91Z2huZXNzLCBOKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuIGZsb2F0IE5vTCA9IGNsYW1wKEwueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBOb0ggPSBjbGFtcChILnosIDAuMCwgMS4wKTtcXG4gZmxvYXQgVm9IID0gY2xhbXAoZG90KFYsIEgpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gZmxvYXQgRyA9IEdfU21pdGgocm91Z2huZXNzLCBOb1YsIE5vTCk7XFxuIGZsb2F0IEdfVmlzID0gRyAqIFZvSCAvIChOb0ggKiBOb1YpO1xcbiBmbG9hdCBGYyA9IHBvdygxLjAgLSBWb0gsIDUuMCk7XFxuIEEgKz0gKDEuMCAtIEZjKSAqIEdfVmlzO1xcbiBCICs9IEZjICogR19WaXM7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzIoQSwgQikgLyBmU2FtcGxlTnVtYmVyLCAwLjAsIDEuMCk7XFxufVxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIiNkZWZpbmUgU0hBREVSX05BTUUgcHJlZmlsdGVyXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiB2ZWMzIE4gPSBWO1xcbiB2ZWMzIHByZWZpbHRlcmVkQ29sb3IgPSB2ZWMzKDAuMCk7XFxuIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wO1xcbiBmbG9hdCBmTWF4U2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmTWF4U2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gcHJlZmlsdGVyZWRDb2xvciArPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2IgKiBOb0w7XFxuIHRvdGFsV2VpZ2h0ICs9IE5vTDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KHByZWZpbHRlcmVkQ29sb3IgLyB0b3RhbFdlaWdodCwgMS4wKSk7XFxufVxcblwiO1xyXG4iLCIvLyBDdWJlbWFwIHByZWZpbHRlciB1dGlsaXR5XHJcbi8vIGh0dHA6Ly93d3cudW5yZWFsZW5naW5lLmNvbS9maWxlcy9kb3dubG9hZHMvMjAxM1NpZ2dyYXBoUHJlc2VudGF0aW9uc05vdGVzLnBkZlxyXG4vLyBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMy9ncHVnZW1zM19jaDIwLmh0bWxcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdGV4dHVyZSc7XHJcblxyXG5pbXBvcnQgaW50ZWdyYXRlQlJERlNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvaW50ZWdyYXRlQlJERi5nbHNsLmpzJztcclxuaW1wb3J0IHByZWZpbHRlckZyYWdDb2RlIGZyb20gJy4vc2hhZGVyL3ByZWZpbHRlci5nbHNsLmpzJztcclxuXHJcbnZhciBjdWJlbWFwVXRpbCA9IHt9O1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBUT0RPIERvd25zYW1wbGVcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkudXRpbC5jdWJlbWFwLnByZWZpbHRlckVudmlyb25tZW50TWFwXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy53aWR0aD02NF1cclxuICogQHBhcmFtICB7bnVtYmVyfSBbdGV4dHVyZU9wdHMuaGVpZ2h0PTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy50eXBlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZW5jb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk09ZmFsc2VdXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbbm9ybWFsRGlzdHJpYnV0aW9uXVxyXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gW2JyZGZMb29rdXBdXHJcbiAqL1xyXG5jdWJlbWFwVXRpbC5wcmVmaWx0ZXJFbnZpcm9ubWVudE1hcCA9IGZ1bmN0aW9uIChcclxuICAgIHJlbmRlcmVyLCBlbnZNYXAsIHRleHR1cmVPcHRzLCBub3JtYWxEaXN0cmlidXRpb24sIGJyZGZMb29rdXBcclxuKSB7XHJcbiAgICAvLyBOb3QgY3JlYXRlIG90aGVyIHJlbmRlcmVyLCBpdCBpcyBlYXN5IGhhdmluZyBpc3N1ZSBvZiBjcm9zcyByZWZlcmVuY2Ugb2YgcmVzb3VyY2VzIGxpa2UgZnJhbWVidWZmZXJcclxuICAgIC8vIFBFTkRJTkcgcHJlc2VydmVEcmF3aW5nQnVmZmVyP1xyXG4gICAgaWYgKCFicmRmTG9va3VwIHx8ICFub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgIGJyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGV4dHVyZU9wdHMgPSB0ZXh0dXJlT3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgd2lkdGggPSB0ZXh0dXJlT3B0cy53aWR0aCB8fCA2NDtcclxuICAgIHZhciBoZWlnaHQgPSB0ZXh0dXJlT3B0cy5oZWlnaHQgfHwgNjQ7XHJcblxyXG4gICAgdmFyIHRleHR1cmVUeXBlID0gdGV4dHVyZU9wdHMudHlwZSB8fCBlbnZNYXAudHlwZTtcclxuXHJcbiAgICAvLyBVc2Ugc2FtZSB0eXBlIHdpdGggZ2l2ZW4gZW52TWFwXHJcbiAgICB2YXIgcHJlZmlsdGVyZWRDdWJlTWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUsXHJcbiAgICAgICAgZmxpcFk6IGZhbHNlLFxyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXByZWZpbHRlcmVkQ3ViZU1hcC5pc1Bvd2VyT2ZUd28oKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignV2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIHR3byB0byBlbmFibGUgbWlwbWFwLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzaXplID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XHJcbiAgICB2YXIgbWlwbWFwTnVtID0gTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygyKSArIDE7XHJcblxyXG4gICAgdmFyIHByZWZpbHRlck1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICB2ZXJ0ZXg6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLFxyXG4gICAgICAgICAgICBmcmFnbWVudDogcHJlZmlsdGVyRnJhZ0NvZGVcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICBwcmVmaWx0ZXJNYXRlcmlhbC5zZXQoJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcblxyXG4gICAgdGV4dHVyZU9wdHMuZW5jb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICB0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuXHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNreUVudjtcclxuXHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIC8vIENvbnZlcnQgcGFub3JhbWEgdG8gY3ViZW1hcFxyXG4gICAgICAgIHZhciBlbnZDdWJlbWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgLy8gRklYTUUgRkxPQVQgdHlwZSB3aWxsIGNhdXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCBlcnJvciBvbiBpT1NcclxuICAgICAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUgPT09IFRleHR1cmUuRkxPQVQgP1xyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5IQUxGX0ZMT0FUIDogdGV4dHVyZVR5cGVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0ZXh0dXJlVXRpbC5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgZW52TWFwLCBlbnZDdWJlbWFwLCB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgZW5jb2RlUkdCTSBzbyBpdCBjYW4gYmUgZGVjb2RlZCBhcyBSR0JNXHJcbiAgICAgICAgICAgIGVuY29kZVJHQk06IHRleHR1cmVPcHRzLmRlY29kZVJHQk1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnZNYXAgPSBlbnZDdWJlbWFwO1xyXG4gICAgfVxyXG4gICAgc2t5RW52ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IHByZWZpbHRlck1hdGVyaWFsXHJcbiAgICB9KTtcclxuICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHByZWZpbHRlcmVkQ3ViZU1hcFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRm9yY2UgdG8gYmUgVU5TSUdORURfQllURVxyXG4gICAgaWYgKHRleHR1cmVPcHRzLmVuY29kZVJHQk0pIHtcclxuICAgICAgICB0ZXh0dXJlVHlwZSA9IHByZWZpbHRlcmVkQ3ViZU1hcC50eXBlID0gVGV4dHVyZS5VTlNJR05FRF9CWVRFO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZW5kZXJUYXJnZXRUbXAgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGVcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IHZlbmRvclt0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5VTlNJR05FRF9CWVRFID8gJ1VpbnQ4QXJyYXknIDogJ0Zsb2F0MzJBcnJheSddO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBtYXBOdW07IGkrKykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZSgncHJlZmlsdGVyJyk7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0gPSB7XHJcbiAgICAgICAgICAgIHBpeGVsczoge31cclxuICAgICAgICB9O1xyXG4gICAgICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIGkgLyAobWlwbWFwTnVtIC0gMSkpO1xyXG5cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRhcmdldHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBBcnJheUN0b3IocmVuZGVyVGFyZ2V0VG1wLndpZHRoICogcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAqIDQpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gocmVuZGVyVGFyZ2V0VG1wKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tqXSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mb3YgPSBmb3Y7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihkdW1teVNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAgICAgMCwgMCwgcmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCB0ZXh0dXJlVHlwZSwgcGl4ZWxzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIC8vIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgLy8gY2FudmFzLndpZHRoID0gcmVuZGVyVGFyZ2V0VG1wLndpZHRoO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMuaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0VG1wLmhlaWdodDtcclxuICAgICAgICAgICAgLy8gdmFyIGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEocmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0KTtcclxuICAgICAgICAgICAgLy8gZm9yICh2YXIgayA9IDA7IGsgPCBwaXhlbHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgLy8gICAgIGltYWdlRGF0YS5kYXRhW2tdID0gcGl4ZWxzW2tdO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcclxuICAgICAgICAgICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0ucGl4ZWxzW3RhcmdldHNbal1dID0gcGl4ZWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLndpZHRoIC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAvPSAyO1xyXG4gICAgICAgIHJlbmRlclRhcmdldFRtcC5kaXJ0eSgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZUVuZCgncHJlZmlsdGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZW5kZXJUYXJnZXRUbXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBza3lFbnYuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAvLyBSZW1vdmUgZ3B1IHJlc291cmNlIGFsbHVjYXRlZCBpbiByZW5kZXJlclxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIC8vIHJlbmRlcmVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwOiBwcmVmaWx0ZXJlZEN1YmVNYXAsXHJcbiAgICAgICAgYnJkZkxvb2t1cDogYnJkZkxvb2t1cCxcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb246IG5vcm1hbERpc3RyaWJ1dGlvbixcclxuICAgICAgICBtYXhNaXBtYXBMZXZlbDogbWlwbWFwTnVtXHJcbiAgICB9O1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERiA9IGZ1bmN0aW9uIChyZW5kZXJlciwgbm9ybWFsRGlzdHJpYnV0aW9uKSB7XHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24gPSBub3JtYWxEaXN0cmlidXRpb24gfHwgY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgIHZhciBmcmFtZWJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcih7XHJcbiAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHZhciBwYXNzID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogNTEyLFxyXG4gICAgICAgIGhlaWdodDogMjU2LFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ3ZpZXdwb3J0U2l6ZScsIFs1MTIsIDI1Nl0pO1xyXG4gICAgcGFzcy5hdHRhY2hPdXRwdXQodGV4dHVyZSk7XHJcbiAgICBwYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVidWZmZXIpO1xyXG5cclxuICAgIC8vIEZJWE1FIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IGNhbiByZWFkUGl4ZWxzIHdpdGggZmxvYXQgdHlwZS5cclxuICAgIC8vIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgLy8gdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoNTEyICogMjU2ICogNCk7XHJcbiAgICAvLyByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgLy8gICAgIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LFxyXG4gICAgLy8gICAgIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzXHJcbiAgICAvLyApO1xyXG4gICAgLy8gdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAvLyB0ZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAvLyB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAvLyBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0dXJlO1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24gPSBmdW5jdGlvbiAocm91Z2huZXNzTGV2ZWxzLCBzYW1wbGVTaXplKSB7XHJcblxyXG4gICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAvLyBHTFNMIG5vdCBzdXBwb3J0IGJpdCBvcGVyYXRpb24sIHVzZSBsb29rdXAgaW5zdGVhZFxyXG4gICAgLy8gViAtPiBpIC8gTiwgVSAtPiByb3VnaG5lc3NcclxuICAgIHZhciByb3VnaG5lc3NMZXZlbHMgPSByb3VnaG5lc3NMZXZlbHMgfHwgMjU2O1xyXG4gICAgdmFyIHNhbXBsZVNpemUgPSBzYW1wbGVTaXplIHx8IDEwMjQ7XHJcblxyXG4gICAgdmFyIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiByb3VnaG5lc3NMZXZlbHMsXHJcbiAgICAgICAgaGVpZ2h0OiBzYW1wbGVTaXplLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHVzZU1pcG1hcDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2FtcGxlU2l6ZSAqIHJvdWdobmVzc0xldmVscyAqIDQpO1xyXG4gICAgdmFyIHRtcCA9IFtdO1xyXG5cclxuICAgIC8vIGZ1bmN0aW9uIHNvcnRGdW5jKGEsIGIpIHtcclxuICAgIC8vICAgICByZXR1cm4gTWF0aC5hYnMoYikgLSBNYXRoLmFicyhhKTtcclxuICAgIC8vIH1cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm91Z2huZXNzTGV2ZWxzOyBqKyspIHtcclxuICAgICAgICB2YXIgcm91Z2huZXNzID0gaiAvIHJvdWdobmVzc0xldmVscztcclxuICAgICAgICB2YXIgYSA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9CaXR3aXNlX09wZXJhdG9yc1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE5MDg0OTIvdW5zaWduZWQtaW50ZWdlci1pbi1qYXZhc2NyaXB0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyMjM1MC93aGF0LWlzLXRoZS1qYXZhc2NyaXB0LW9wZXJhdG9yLWFuZC1ob3ctZG8teW91LXVzZS1pdFxyXG4gICAgICAgICAgICB2YXIgeSA9IChpIDw8IDE2IHwgaSA+Pj4gMTYpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgMTQzMTY1NTc2NSkgPDwgMSB8ICh5ICYgMjg2MzMxMTUzMCkgPj4+IDEpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgODU4OTkzNDU5KSA8PCAyIHwgKHkgJiAzNDM1OTczODM2KSA+Pj4gMikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAyNTI2NDUxMzUpIDw8IDQgfCAoeSAmIDQwNDIzMjIxNjApID4+PiA0KSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoKHkgJiAxNjcxMTkzNSkgPDwgOCB8ICh5ICYgNDI3ODI1NTM2MCkgPj4+IDgpID4+PiAwKSAvIDQyOTQ5NjcyOTY7XHJcblxyXG4gICAgICAgICAgICAvLyBDREZcclxuICAgICAgICAgICAgdmFyIGNvc1RoZXRhID0gTWF0aC5zcXJ0KCgxIC0geSkgLyAoMSArIChhICogYSAtIDEuMCkgKiB5KSk7XHJcbiAgICAgICAgICAgIHRtcFtpXSA9IGNvc1RoZXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IChpICogcm91Z2huZXNzTGV2ZWxzICsgaikgKiA0O1xyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSB0bXBbaV07XHJcbiAgICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NUaGV0YSAqIGNvc1RoZXRhKTtcclxuICAgICAgICAgICAgdmFyIHggPSBpIC8gc2FtcGxlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHBoaSA9IDIuMCAqIE1hdGguUEkgKiB4O1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0XSA9IHNpblRoZXRhICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDFdID0gY29zVGhldGE7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXQgKyAyXSA9IHNpblRoZXRhICogTWF0aC5zaW4ocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbi5waXhlbHMgPSBwaXhlbHM7XHJcblxyXG4gICAgcmV0dXJuIG5vcm1hbERpc3RyaWJ1dGlvbjtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGN1YmVtYXBVdGlsO1xyXG4iLCIvLyBodHRwczovL2RvY3MudW5yZWFsZW5naW5lLmNvbS9sYXRlc3QvSU5UL0VuZ2luZS9SZW5kZXJpbmcvTGlnaHRpbmdBbmRTaGFkb3dzL0FtYmllbnRDdWJlbWFwL1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgY3ViZW1hcFV0aWwgZnJvbSAnLi4vdXRpbC9jdWJlbWFwJztcclxuXHJcbi8qKlxyXG4gKiBBbWJpZW50IGN1YmVtYXAgbGlnaHQgcHJvdmlkZXMgc3BlY3VsYXIgcGFydHMgb2YgSW1hZ2UgQmFzZWQgTGlnaHRpbmcuXHJcbiAqIFdoaWNoIGlzIGEgYmFzaWMgcmVxdWlyZW1lbnQgZm9yIFBoeXNpY2FsbHkgQmFzZWQgUmVuZGVyaW5nXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50Q3ViZW1hcExpZ2h0ID0gTGlnaHQuZXh0ZW5kKHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXAjXHJcbiAgICAgKi9cclxuICAgIGN1YmVtYXA6IG51bGwsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgLy8gcmFuZ2U6IDEwMCxcclxuXHJcbiAgICBjYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICBfbm9ybWFsRGlzdHJpYnV0aW9uOiBudWxsLFxyXG4gICAgX2JyZGZMb29rdXA6IG51bGxcclxuXHJcbn0sIC8qKiBAbGVuZHMgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCMgKi8ge1xyXG5cclxuICAgIHR5cGU6ICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG8gcHJlZml0ZXJpbmcgdGhlIGN1YmVtYXBcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0zMl1cclxuICAgICAqL1xyXG4gICAgcHJlZmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICBpZiAoIXJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJykpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXZpY2Ugbm90IHN1cHBvcnQgdGV4dHVyZUN1YmVMb2RFWFQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX2JyZGZMb29rdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uID0gY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdWJlbWFwID0gdGhpcy5jdWJlbWFwO1xyXG4gICAgICAgIGlmIChjdWJlbWFwLl9fcHJlZmlsdGVyZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwKFxyXG4gICAgICAgICAgICByZW5kZXJlciwgY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgZW5jb2RlUkdCTTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplXHJcbiAgICAgICAgICAgIH0sIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbiwgdGhpcy5fYnJkZkxvb2t1cFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwID0gcmVzdWx0LmVudmlyb25tZW50TWFwO1xyXG4gICAgICAgIHRoaXMuY3ViZW1hcC5fX3ByZWZpbHRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY3ViZW1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QlJERkxvb2t1cDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmRmTG9va3VwO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5jdWJlbWFwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXA6IHtcclxuICAgICAgICAgICAgdHlwZTogJ3QnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX2JyZGZMb29rdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudEN1YmVtYXB9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRDdWJlbWFwTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIFNwaGVyaWNhbCBIYXJtb25pYyBBbWJpZW50IExpZ2h0XHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRTSFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgQW1iaWVudFNITGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BoZXJpY2FsIEhhcm1vbmljIENvZWZmaWNpZW50c1xyXG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudFNII1xyXG4gICAgICovXHJcbiAgICBjb2VmZmljaWVudHM6IFtdLFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY29lZmZpY2llbnRzVG1wQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfU0hfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50U0hMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50czoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzVG1wQXJyID0gaW5zdGFuY2UuX2NvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdGFuY2UuY29lZmZpY2llbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29lZmZpY2llbnRzVG1wQXJyW2ldID0gaW5zdGFuY2UuY29lZmZpY2llbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRTSExpZ2h0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxudmFyIFRleHR1cmVQb29sID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG59O1xyXG5cclxuVGV4dHVyZVBvb2wucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBUZXh0dXJlUG9vbCxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0LnBvcCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHRleHR1cmUpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBsaXN0LnB1c2godGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzW2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb29sID0ge307XHJcbiAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgd3JhcFM6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgd3JhcFQ6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIGZsaXBZOiB0cnVlLFxyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2VcclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1Qcm9wTGlzdCA9IE9iamVjdC5rZXlzKGRlZmF1bHRQYXJhbXMpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkocGFyYW1ldGVycykge1xyXG4gICAgdXRpbC5kZWZhdWx0c1dpdGhQcm9wTGlzdChwYXJhbWV0ZXJzLCBkZWZhdWx0UGFyYW1zLCBkZWZhdWx0UGFyYW1Qcm9wTGlzdCk7XHJcbiAgICBmYWxsQmFjayhwYXJhbWV0ZXJzKTtcclxuXHJcbiAgICB2YXIga2V5ID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRQYXJhbVByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBkZWZhdWx0UGFyYW1Qcm9wTGlzdFtpXTtcclxuICAgICAgICB2YXIgY2h1bmsgPSBwYXJhbWV0ZXJzW25hbWVdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAga2V5ICs9IGNodW5rO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmFsbEJhY2sodGFyZ2V0KSB7XHJcblxyXG4gICAgdmFyIElQT1QgPSBpc1Bvd2VyT2ZUd28odGFyZ2V0LndpZHRoLCB0YXJnZXQuaGVpZ2h0KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0LmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgIHRhcmdldC51c2VNaXBtYXAgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUlQT1QgfHwgIXRhcmdldC51c2VNaXBtYXApIHtcclxuICAgICAgICBpZiAodGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlQT1QpIHtcclxuICAgICAgICB0YXJnZXQud3JhcFMgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB0YXJnZXQud3JhcFQgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNQb3dlck9mVHdvKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiAod2lkdGggJiAod2lkdGgtMSkpID09PSAwICYmXHJcbiAgICAgICAgICAgIChoZWlnaHQgJiAoaGVpZ2h0LTEpKSA9PT0gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZVBvb2w7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNtLmRlcHRoLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgPSB2ZWMyKDEuMCwgMS4wKTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgPSB2ZWMyKDAuMCwgMC4wKTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gdl9WaWV3UG9zaXRpb247XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVwdGguZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBiaWFzIDogMC4wMDE7XFxudW5pZm9ybSBmbG9hdCBzbG9wZVNjYWxlIDogMS4wO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gZmxvYXQgZGVwdGggPSB2X1ZpZXdQb3NpdGlvbi56IC8gdl9WaWV3UG9zaXRpb24udztcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuI2lmZGVmIFVTRV9WU01cXG4gZGVwdGggPSBkZXB0aCAqIDAuNSArIDAuNTtcXG4gZmxvYXQgbW9tZW50MSA9IGRlcHRoO1xcbiBmbG9hdCBtb21lbnQyID0gZGVwdGggKiBkZXB0aDtcXG4gI2lmZGVmIFNVUFBPUlRfU1RBTkRBUkRfREVSSVZBVElWRVNcXG4gZmxvYXQgZHggPSBkRmR4KGRlcHRoKTtcXG4gZmxvYXQgZHkgPSBkRmR5KGRlcHRoKTtcXG4gbW9tZW50MiArPSAwLjI1KihkeCpkeCtkeSpkeSk7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KG1vbWVudDEsIG1vbWVudDIsIDAuMCwgMS4wKTtcXG4jZWxzZVxcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBkZXB0aCArPSBzcXJ0KGR4KmR4ICsgZHkqZHkpICogc2xvcGVTY2FsZSArIGJpYXM7XFxuICNlbHNlXFxuIGRlcHRoICs9IGJpYXM7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkZXB0aCAqIDAuNSArIDAuNSk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVidWdfZGVwdGhcXG51bmlmb3JtIHNhbXBsZXIyRCBkZXB0aE1hcDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKGRlcHRoTWFwLCB2X1RleGNvb3JkKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleC5yZ2IsIDEuMCk7XFxuI2Vsc2VcXG4gZmxvYXQgZGVwdGggPSBkZWNvZGVGbG9hdCh0ZXgpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRlcHRoLCBkZXB0aCwgZGVwdGgsIDEuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluICgpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24gLCAxLjApO1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKSkueHl6O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRpc3RhbmNlLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSBmbG9hdCByYW5nZSA6IDEwMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkaXN0ID0gZGlzdGFuY2UobGlnaHRQb3NpdGlvbiwgdl9Xb3JsZFBvc2l0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRpc3QsIGRpc3QgKiBkaXN0LCAwLjAsIDAuMCk7XFxuI2Vsc2VcXG4gZGlzdCA9IGRpc3QgLyByYW5nZTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZGlzdCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuZmxvYXQgdGFwU2hhZG93TWFwKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHope1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRChtYXAsIHV2KTtcXG4gcmV0dXJuIHN0ZXAoeiwgZGVjb2RlRmxvYXQodGV4KSAqIDIuMCAtIDEuMCk7XFxufVxcbmZsb2F0IHBjZihzYW1wbGVyMkQgbWFwLCB2ZWMyIHV2LCBmbG9hdCB6LCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gdGFwU2hhZG93TWFwKG1hcCwgdXYsIHopO1xcbiB2ZWMyIG9mZnNldCA9IHZlYzIoMS4wIC8gdGV4dHVyZVNpemUpICogc2NhbGU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUENGX0tFUk5FTF9TSVpFOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2ICsgb2Zmc2V0ICogcGNmS2VybmVsW19pZHhfXSwgeik7XFxuIH19XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gZmxvYXQoUENGX0tFUk5FTF9TSVpFICsgMSk7XFxuI2Vsc2VcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoMC4wLCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKC1vZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMihvZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIC1vZmZzZXQueSksIHopO1xcbiByZXR1cm4gc2hhZG93Q29udHJpYiAvIDkuMDtcXG4jZW5kaWZcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBwY2YobWFwLCB1diwgeiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7XFxufVxcbmZsb2F0IGNoZWJ5c2hldlVwcGVyQm91bmQodmVjMiBtb21lbnRzLCBmbG9hdCB6KXtcXG4gZmxvYXQgcCA9IDAuMDtcXG4geiA9IHogKiAwLjUgKyAwLjU7XFxuIGlmICh6IDw9IG1vbWVudHMueCkge1xcbiBwID0gMS4wO1xcbiB9XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiB2YXJpYW5jZSA9IG1heCh2YXJpYW5jZSwgMC4wMDAwMDAxKTtcXG4gZmxvYXQgbUQgPSBtb21lbnRzLnggLSB6O1xcbiBmbG9hdCBwTWF4ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBtRCAqIG1EKTtcXG4gcE1heCA9IGNsYW1wKChwTWF4LTAuNCkvKDEuMC0wLjQpLCAwLjAsIDEuMCk7XFxuIHJldHVybiBtYXgocCwgcE1heCk7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzYW1wbGVyMkQgbWFwLCBtYXQ0IGxpZ2h0VlBNLCB2ZWMzIHBvc2l0aW9uLCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSwgdmVjMiBvZmZzZXRcXG4pIHtcXG4gdmVjNCBwb3NJbkxpZ2h0U3BhY2UgPSBsaWdodFZQTSAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIHBvc0luTGlnaHRTcGFjZS54eXogLz0gcG9zSW5MaWdodFNwYWNlLnc7XFxuIGZsb2F0IHogPSBwb3NJbkxpZ2h0U3BhY2UuejtcXG4gaWYoYWxsKGdyZWF0ZXJUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoLTAuOTksIC0wLjk5LCAtMS4wKSkpICYmXFxuIGFsbChsZXNzVGhhbihwb3NJbkxpZ2h0U3BhY2UueHl6LCB2ZWMzKDAuOTksIDAuOTksIDEuMCkpKSl7XFxuIHZlYzIgdXYgPSAocG9zSW5MaWdodFNwYWNlLnh5KzEuMCkgLyAyLjA7XFxuICNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHRleHR1cmUyRChtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQpLnh5O1xcbiByZXR1cm4gY2hlYnlzaGV2VXBwZXJCb3VuZChtb21lbnRzLCB6KTtcXG4gI2Vsc2VcXG4gcmV0dXJuIHBjZihtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQsIHosIHRleHR1cmVTaXplLCBzY2FsZSk7XFxuICNlbmRpZlxcbiB9XFxuIHJldHVybiAxLjA7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBjb21wdXRlU2hhZG93Q29udHJpYihtYXAsIGxpZ2h0VlBNLCBwb3NpdGlvbiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSwgdmVjMigwLjApKTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKHNhbXBsZXJDdWJlIG1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChkaXJlY3Rpb24pO1xcbiB2ZWM0IHNoYWRvd1RleCA9IHRleHR1cmVDdWJlKG1hcCwgZGlyZWN0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiB2ZWMyIG1vbWVudHMgPSBzaGFkb3dUZXgueHk7XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIGRpc3Q7XFxuIGZsb2F0IHAgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBpZihtb21lbnRzLnggKyAwLjAwMSA8IGRpc3Qpe1xcbiByZXR1cm4gY2xhbXAocCwgMC4wLCAxLjApO1xcbiB9ZWxzZXtcXG4gcmV0dXJuIDEuMDtcXG4gfVxcbiNlbHNlXFxuIHJldHVybiBzdGVwKGRpc3QsIChkZWNvZGVGbG9hdChzaGFkb3dUZXgpICsgMC4wMDAyKSAqIHJhbmdlKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKSB8fCBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4jaWZkZWYgU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcG90TGlnaHRTaGFkb3dNYXBzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgc3BvdExpZ2h0TWF0cmljZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG4jaWYgZGVmaW5lZChTSEFET1dfQ0FTQ0FERSlcXG51bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgcG9pbnRMaWdodFNoYWRvd01hcHNbUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG51bmlmb3JtIGJvb2wgc2hhZG93RW5hYmxlZCA6IHRydWU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbnVuaWZvcm0gdmVjMiBwY2ZLZXJuZWxbUENGX0tFUk5FTF9TSVpFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1NQT1RfTElHSFRfQ09VTlRdICkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzcG90TGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgc3BvdExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbX2lkeF9dXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBTUE9UX0xJR0hUX0NPVU5UOyBfaWR4XysrKXt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTSEFET1dfQ0FTQ0FERVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgZGVwdGggPSAoMi4wICogZ2xfRnJhZ0Nvb3JkLnogLSBnbF9EZXB0aFJhbmdlLm5lYXIgLSBnbF9EZXB0aFJhbmdlLmZhcilcXG4gLyAoZ2xfRGVwdGhSYW5nZS5mYXIgLSBnbF9EZXB0aFJhbmdlLm5lYXIpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBzaGFkb3dDb250cmlic1swXSA9IDEuMDtcXG4gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNIQURPV19DQVNDQURFOyBfaWR4XysrKSB7e1xcbiBpZiAoXFxuIGRlcHRoID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIGRlcHRoIDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMF0sIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMF0sXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiBzaGFkb3dDb250cmlic1swXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZWxzZVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tQT0lOVF9MSUdIVF9DT1VOVF0gKXtcXG4gdmVjMyBsaWdodFBvc2l0aW9uO1xcbiB2ZWMzIGRpcmVjdGlvbjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gZGlyZWN0aW9uID0gcG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkocG9pbnRMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb24sIHBvaW50TGlnaHRSYW5nZVtfaWR4X10pO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4uL1JlbmRlcmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5cclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmVQb29sIGZyb20gJy4uL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbmltcG9ydCBzaGFkb3dtYXBFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2hhZG93bWFwLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNoYWRvd21hcEVzc2wpO1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0ocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNEZXB0aE1hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzaGFkb3cgbWFwLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLlNoYWRvd01hcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLlNoYWRvd01hcCh7XHJcbiAqICAgICAgICAgc29mdFNoYWRvdzogY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBTaGFkb3dNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wcmVQYXNzLlNoYWRvd01hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNvZnQgc2hhZG93IHRlY2huaXF1ZS5cclxuICAgICAgICAgKiBDYW4gYmUge0BsaW5rIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuUENGfSBvciB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU019XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzb2Z0U2hhZG93OiBTaGFkb3dNYXBQYXNzLlBDRixcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgYmx1ciBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dCbHVyOiAxLjAsXHJcblxyXG4gICAgICAgIGxpZ2h0RnJ1c3R1bUJpYXM6ICdhdXRvJyxcclxuXHJcbiAgICAgICAga2VybmVsUENGOiBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAgICAgMSwgMCxcclxuICAgICAgICAgICAgMSwgMSxcclxuICAgICAgICAgICAgLTEsIDEsXHJcbiAgICAgICAgICAgIDAsIDEsXHJcbiAgICAgICAgICAgIC0xLCAwLFxyXG4gICAgICAgICAgICAtMSwgLTEsXHJcbiAgICAgICAgICAgIDEsIC0xLFxyXG4gICAgICAgICAgICAwLCAtMVxyXG4gICAgICAgIF0pLFxyXG5cclxuICAgICAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgICAgIF9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF90ZXh0dXJlczoge30sXHJcbiAgICAgICAgX3NoYWRvd01hcE51bWJlcjoge1xyXG4gICAgICAgICAgICAnUE9JTlRfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnRElSRUNUSU9OQUxfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnU1BPVF9MSUdIVCc6IDBcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZGVwdGhNYXRlcmlhbHM6IHt9LFxyXG4gICAgICAgIF9kaXN0YW5jZU1hdGVyaWFsczoge30sXHJcblxyXG4gICAgICAgIF9yZWNlaXZlcnM6IFtdLFxyXG4gICAgICAgIF9saWdodHNDYXN0U2hhZG93OiBbXSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q2FtZXJhczoge30sXHJcbiAgICAgICAgX2xpZ2h0TWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gR2F1c3NpYW4gZmlsdGVyIHBhc3MgZm9yIFZTTVxyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSCA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmdhdXNzaWFuX2JsdXInKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc0guc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyRGlyJywgMC4wKTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyRGlyJywgMS4wKTtcclxuXHJcbiAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc20uZGVidWdfZGVwdGgnKVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHNjZW5lIHRvIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gc2NlbmVDYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIGlmICghc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyU2hhZG93UGFzcyhyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYnVnIHJlbmRlcmluZyBvZiBzaGFkb3cgdGV4dHVyZXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIHggPSAwLCB5ID0gMDtcclxuICAgICAgICB2YXIgd2lkdGggPSBzaXplIHx8IHZpZXdwb3J0LndpZHRoIC8gNDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGggKiB0ZXh0dXJlLndpZHRoIC8gdGV4dHVyZS5oZWlnaHQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5zZXRVbmlmb3JtKCdkZXB0aE1hcCcsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgeCArPSB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUmVjZWl2ZXJzOiBmdW5jdGlvbiAocmVuZGVyZXIsIG1lc2gpIHtcclxuICAgICAgICBpZiAobWVzaC5yZWNlaXZlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY2VpdmVycy5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDEpO1xyXG5cclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3BjZktlcm5lbCcsIHRoaXMua2VybmVsUENGKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICAgICAgdmFyIGtlcm5lbFBDRiA9IHRoaXMua2VybmVsUENGO1xyXG4gICAgICAgICAgICBpZiAoa2VybmVsUENGICYmIGtlcm5lbFBDRi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnLCBrZXJuZWxQQ0YubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlUmVjZWl2ZXJzKHJlbmRlcmVyLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5jYXN0U2hhZG93ICYmICFsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cucHVzaChsaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJTaGFkb3dQYXNzOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAvLyByZXNldFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltuYW1lXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICB0aGlzLl91cGRhdGUocmVuZGVyZXIsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgLy8gTmVlZHMgdG8gdXBkYXRlIHRoZSByZWNlaXZlcnMgYWdhaW4gaWYgc2hhZG93cyBjb21lIGZyb20gMSB0byAwLlxyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggJiYgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93ID09PSAwO1xyXG5cclxuICAgICAgICBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFyIHdpdGggaGlnaC16LCBzbyB0aGUgcGFydCBub3QgcmVuZGVyZWQgd2lsbCBub3QgYmVlbiBzaGFkb3dlZFxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyBUT0RPIHJlc3RvcmVcclxuICAgICAgICBfZ2wuY2xlYXJDb2xvcigxLjAsIDEuMCwgMS4wLCAxLjApO1xyXG5cclxuICAgICAgICAvLyBTaGFkb3cgdW5pZm9ybXNcclxuICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50TGlnaHRTaGFkb3dNYXBzID0gW107XHJcblxyXG4gICAgICAgIHZhciBkaXJMaWdodEhhc0Nhc2NhZGU7XHJcbiAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmVzIGZvciBzaGFkb3cgbWFwXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3dbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC50eXBlID09PSAnRElSRUNUSU9OQUxfTElHSFQnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRpckxpZ2h0SGFzQ2FzY2FkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignT25seSBvbmUgZGlyZWVjdGlvbmFsIGxpZ2h0IHN1cHBvcnRlZCB3aXRoIHNoYWRvdyBjYXNjYWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGlnaHQuc2hhZG93Q2FzY2FkZSA+IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N1cHBvcnQgYXQgbW9zdCA0IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpckxpZ2h0SGFzQ2FzY2FkZSA9IGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdTUE9UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltsaWdodC50eXBlXSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIHRoaXMuX3NoYWRvd01hcE51bWJlcikge1xyXG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBsaWdodFR5cGUgKyAnX1NIQURPV01BUF9DT1VOVCc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZnJhZ21lbnREZWZpbmVzW2tleV0gIT09IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBrZXksIG51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgZGlyTGlnaHRIYXNDYXNjYWRlLnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRTaXplKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzLCB0eXBlOiAndHYnIH07XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd0Nhc2NhZGVDbGlwc0ZhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5wb3AoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5zaGlmdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgZnJvbSBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnNoYWRvd0Nhc2NhZGVDbGlwc05lYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0geyB2YWx1ZTogc2hhZG93Q2FzY2FkZUNsaXBzRmFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3BvdExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHNwb3RMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICB2YXIgc2hhZG93VW5pZm9ybXMgPSBzY2VuZS5zaGFkb3dVbmlmb3JtcztcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0TWF0cmljZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRTaGFkb3dNYXBTaXplcywgdHlwZTogJzFmdicgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb2ludExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogcG9pbnRMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlckRpcmVjdGlvbmFsTGlnaHRTaGFkb3c6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGxpdEZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xyXG4gICAgICAgIHZhciBzcGxpdFByb2pNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBjcm9wQkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjcm9wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbGlnaHQsIHNoYWRvd0Nhc2NhZGVDbGlwcywgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gRmlyc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuaXNGaW5pdGUoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIC5jb3B5KGJvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShzY2VuZUNhbWVyYS52aWV3TWF0cml4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb25zaWRlcmluZyBtb3Zpbmcgc3BlZWQgc2luY2UgdGhlIGJvdW5kaW5nIGJveCBpcyBmcm9tIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgLy8gVE9ETzogYWRkIGEgYmlhc1xyXG4gICAgICAgICAgICB2YXIgY2xpcHBlZEZhciA9IE1hdGgubWluKC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWluLnosIHNjZW5lQ2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkTmVhciA9IE1hdGgubWF4KC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnosIHNjZW5lQ2FtZXJhLm5lYXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYShsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsdnBNYXQ0QXJyID0gbGlnaHRWaWV3UHJvak1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgbGlnaHRQcm9qTWF0cml4LmNvcHkobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRWaWV3TWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobHZwTWF0NEFyciwgbGlnaHRQcm9qTWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNsaXBQbGFuZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGlzUGVyc3BlY3RpdmUgPSBzY2VuZUNhbWVyYSBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNjYWxlWiA9IChzY2VuZUNhbWVyYS5uZWFyICsgc2NlbmVDYW1lcmEuZmFyKSAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFogPSAyICogc2NlbmVDYW1lcmEubmVhciAqIHNjZW5lQ2FtZXJhLmZhciAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xvZyA9IGNsaXBwZWROZWFyICogTWF0aC5wb3coY2xpcHBlZEZhciAvIGNsaXBwZWROZWFyLCBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VuaSA9IGNsaXBwZWROZWFyICsgKGNsaXBwZWRGYXIgLSBjbGlwcGVkTmVhcikgKiBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZTtcclxuICAgICAgICAgICAgICAgIHZhciBjID0gY2xvZyAqIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3RvciArIGN1bmkgKiAoMSAtIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3Rvcik7XHJcbiAgICAgICAgICAgICAgICBjbGlwUGxhbmVzLnB1c2goYyk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMucHVzaCgtKC1jICogc2NhbGVaICsgb2Zmc2V0WikgLyAtYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0LCBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHJlbmRlcmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0LnNoYWRvd0Nhc2NhZGU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGxpdHRlZCBmcnVzdHVtXHJcbiAgICAgICAgICAgICAgICB2YXIgbmVhclBsYW5lID0gY2xpcFBsYW5lc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBmYXJQbGFuZSA9IGNsaXBQbGFuZXNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGVyc3BlY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHNwbGl0UHJvak1hdHJpeC5hcnJheSwgc2NlbmVDYW1lcmEuZm92IC8gMTgwICogTWF0aC5QSSwgc2NlbmVDYW1lcmEuYXNwZWN0LCBuZWFyUGxhbmUsIGZhclBsYW5lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQub3J0aG8oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0UHJvak1hdHJpeC5hcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDYW1lcmEubGVmdCwgc2NlbmVDYW1lcmEucmlnaHQsIHNjZW5lQ2FtZXJhLmJvdHRvbSwgc2NlbmVDYW1lcmEudG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyUGxhbmUsIGZhclBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNwbGl0RnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbihzcGxpdFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLmdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3goY3JvcEJCb3gsIGxpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBjcm9wQkJveC5hcHBseVByb2plY3Rpb24obGlnaHRQcm9qTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluID0gY3JvcEJCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIF9tYXggPSBjcm9wQkJveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzBdID0gTWF0aC5tYXgoX21pblswXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21pblsxXSA9IE1hdGgubWF4KF9taW5bMV0sIC0xKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMF0gPSBNYXRoLm1pbihfbWF4WzBdLCAxKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMV0gPSBNYXRoLm1pbihfbWF4WzFdLCAxKTtcclxuICAgICAgICAgICAgICAgIGNyb3BNYXRyaXgub3J0aG8oX21pblswXSwgX21heFswXSwgX21pblsxXSwgX21heFsxXSwgMSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5tdWx0aXBseUxlZnQoY3JvcE1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd1NpemUgPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlZCwgbGVmdCB0byByaWdodCA9PiBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgLSBpIC0gMSkgKiBzaGFkb3dTaXplLCAwLCBzaGFkb3dTaXplLCBzaGFkb3dTaXplLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciBmb3IgVlNNXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICAgICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpXHJcbiAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHJlbmRlclNwb3RMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNwb3RMaWdodE1hdHJpY2VzLCBzcG90TGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0U3BvdExpZ2h0Q2FtZXJhKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyTGlzdC5vcGFxdWUsIGxpZ2h0Q2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9nYXVzc2lhbkZpbHRlcihyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBtYXRyaXguY29weShsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLmludmVydCgpXHJcbiAgICAgICAgICAgIC5tdWx0aXBseUxlZnQobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICBzcG90TGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclBvaW50TGlnaHRTaGFkb3c6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBwb2ludExpZ2h0U2hhZG93TWFwcykge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHBvaW50TGlnaHRTaGFkb3dNYXBzLnB1c2godGV4dHVyZSk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0RWFjaFNpZGUgPSB7XHJcbiAgICAgICAgICAgIHB4OiBbXSwgcHk6IFtdLCBwejogW10sIG54OiBbXSwgbnk6IFtdLCBuejogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBiYm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0V29ybGRQb3NpdGlvbiA9IGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICB2YXIgbGlnaHRCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1pbi5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIGxpZ2h0QkJveC5tYXguc2V0QXJyYXkobGlnaHRXb3JsZFBvc2l0aW9uKTtcclxuICAgICAgICB2YXIgZXh0ZW50ID0gbmV3IFZlY3RvcjMocmFuZ2UsIHJhbmdlLCByYW5nZSk7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5hZGQoZXh0ZW50KTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnN1YihleHRlbnQpO1xyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0c05lZWRSZW5kZXIgPSB7IHB4OiBmYWxzZSwgcHk6IGZhbHNlLCBwejogZmFsc2UsIG54OiBmYWxzZSwgbnk6IGZhbHNlLCBuejogZmFsc2UgfTtcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSAmJiByZW5kZXJhYmxlLmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYm94LnRyYW5zZm9ybUZyb20oZ2VvbWV0cnkuYm91bmRpbmdCb3gsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFiYm94LmludGVyc2VjdEJvdW5kaW5nQm94KGxpZ2h0QkJveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYmJveC51cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbdGFyZ2V0c1tpXV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZ0eCA9IGJib3gudmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB2dHhbMF0gLSBsaWdodFdvcmxkUG9zaXRpb25bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSB2dHhbMV0gLSBsaWdodFdvcmxkUG9zaXRpb25bMV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHogPSB2dHhbMl0gLSBsaWdodFdvcmxkUG9zaXRpb25bMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ggPSBNYXRoLmFicyh4KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeSA9IE1hdGguYWJzKHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN6ID0gTWF0aC5hYnMoeik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN4ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeCA+IDAgPyAncHgnIDogJ254J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeSA+IGFic3opIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3kgPiAwID8gJ3B5JyA6ICdueSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3ogPiAwID8gJ3B6JyA6ICdueiddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0c1tpXV0ucHVzaChyZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9nZXRQb2ludExpZ2h0Q2FtZXJhKGxpZ2h0LCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGkpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0XSwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREZXB0aE1hdGVyaWFsOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICB2YXIgc2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXTtcclxuICAgICAgICB2YXIgaXNQb2ludExpZ2h0ID0gbGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJztcclxuICAgICAgICBpZiAoIXNoYWRvd01hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIHZhciBzaGFkZXJQcmVmaXggPSBpc1BvaW50TGlnaHQgPyAnY2xheS5zbS5kaXN0YW5jZS4nIDogJ2NsYXkuc20uZGVwdGguJztcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbixcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICd2ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZShzaGFkZXJQcmVmaXggKyAnZnJhZ21lbnQnKSlcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXSA9IHNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93U2xvcGVTY2FsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ3Nsb3BlU2NhbGUnLCBsaWdodC5zaGFkb3dTbG9wZVNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0JpYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXRVbmlmb3JtKCdiaWFzJywgbGlnaHQuc2hhZG93Qmlhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdsaWdodFBvc2l0aW9uJywgbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5KTtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdyYW5nZScsIGxpZ2h0LnJhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzaGFkb3dNYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2dhdXNzaWFuRmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNpemUpIHtcclxuICAgICAgICB2YXIgcGFyYW1ldGVyID0ge1xyXG4gICAgICAgICAgICB3aWR0aDogc2l6ZSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgdG1wVGV4dHVyZSA9IHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godG1wVGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlV2lkdGgnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmVIZWlnaHQnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHRtcFRleHR1cmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0VGV4dHVyZTogZnVuY3Rpb24gKGxpZ2h0LCBjYXNjYWRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGxpZ2h0Ll9fdWlkX187XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1trZXldO1xyXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gbGlnaHQuc2hhZG93UmVzb2x1dGlvbiB8fCA1MTI7XHJcbiAgICAgICAgY2FzY2FkZSA9IGNhc2NhZGUgfHwgMTtcclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQXQgbW9zdCA0IGNhc2NhZGVcclxuICAgICAgICAgICAgLy8gVE9ETyBzaGFyZSB3aXRoIGhlaWdodCA/XHJcbiAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSByZXNvbHV0aW9uICogY2FzY2FkZTtcclxuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByZXNvbHV0aW9uO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9waWMgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubWFnRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2tleV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRQb2ludExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQsIHRhcmdldCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5wb2ludCA9IHtcclxuICAgICAgICAgICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50W3RhcmdldF07XHJcblxyXG4gICAgICAgIGNhbWVyYS5mYXIgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBzd2l0Y2ggKHRhcmdldCkge1xyXG4gICAgICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWSwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWSwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKGNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgc2NlbmVWaWV3Qm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3QkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIC8vIENhbWVyYSBvZiBkaXJlY3Rpb25hbCBsaWdodCB3aWxsIGJlIGFkanVzdGVkXHJcbiAgICAgICAgLy8gdG8gY29udGFpbiB0aGUgdmlldyBmcnVzdHVtIGFuZCBzY2VuZSBib3VuZGluZyBib3ggYXMgdGlnaHRseSBhcyBwb3NzaWJsZVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobGlnaHQsIHNjZW5lLCBzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbDtcclxuXHJcbiAgICAgICAgICAgIHNjZW5lVmlld0JvdW5kaW5nQm94LmNvcHkoc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lKTtcclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guaW50ZXJzZWN0aW9uKHNjZW5lQ2FtZXJhLmZydXN0dW0uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZnJ1c3R1bShpbiB3b3JsZCBzcGFjZSlcclxuICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAuY29weShzY2VuZVZpZXdCb3VuZGluZ0JveC5taW4pXHJcbiAgICAgICAgICAgICAgICAuYWRkKHNjZW5lVmlld0JvdW5kaW5nQm94Lm1heClcclxuICAgICAgICAgICAgICAgIC5zY2FsZSgwLjUpXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5jb3B5KGxpZ2h0LnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgY2FtZXJhLnNjYWxlLmNvcHkobGlnaHQuc2NhbGUpO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0byBsaWdodCB2aWV3IHNwYWNlXHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeCwgY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXgsIGxpZ2h0Vmlld01hdHJpeCwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgbGlnaHRWaWV3QkJveC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShsaWdodFZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGxpZ2h0Vmlld0JCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbGlnaHRWaWV3QkJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAvLyBNb3ZlIGNhbWVyYSB0byBhZGp1c3QgdGhlIG5lYXIgdG8gMFxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KChtaW5bMF0gKyBtYXhbMF0pIC8gMiwgKG1pblsxXSArIG1heFsxXSkgLyAyLCBtYXhbMl0pXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mYXIgPSAtbWluWzJdICsgbWF4WzJdO1xyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcmVjZWl2ZXJzIG5vdCBpbiB0aGUgZnJ1c3R1bSB3aWxsIHN0aWwgcmVjZWl2ZSB0aGUgc2hhZG93LlxyXG4gICAgICAgICAgICBpZiAoaXNOYU4odGhpcy5saWdodEZydXN0dW1CaWFzKSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciAqPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciArPSB0aGlzLmxpZ2h0RnJ1c3R1bUJpYXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FtZXJhLmxlZnQgPSBtaW5bMF07XHJcbiAgICAgICAgICAgIGNhbWVyYS5yaWdodCA9IG1heFswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnRvcCA9IG1heFsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLmJvdHRvbSA9IG1pblsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2dldFNwb3RMaWdodENhbWVyYTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMuc3BvdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuc3BvdCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3Q7XHJcbiAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXNcclxuICAgICAgICBjYW1lcmEuZm92ID0gbGlnaHQucGVudW1icmFBbmdsZSAqIDI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGxpZ2h0LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ8V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBbcmVuZGVyZXJdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgLy8gUEVORElORyBSZW5kZXJlciBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRcclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbCB8fCByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UoX2dsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIuZ2wpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZXB0aE1hdGVyaWFscyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9saWdodENhbWVyYXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXIgPSB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFscyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlY2VpdmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgLy8gTWVzaCBtYXkgYmUgZGlzcG9zZWRcclxuICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUE9JTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnQU1CSUVOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLl9saWdodHNDYXN0U2hhZG93ID0gW107XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5TaGFkb3dNYXBQYXNzLlZTTSA9IDE7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0ZcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuUENGID0gMjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYWRvd01hcFBhc3M7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSBmcm9tICcuLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFJheVBpY2tpbmcgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IHNjZW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgc2NlbmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCBjYW1lcmFcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJlcjogbnVsbFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9yYXkgPSBuZXcgUmF5KCk7XHJcbiAgICB0aGlzLl9uZGMgPSBuZXcgVmVjdG9yMigpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBuZWFyZXN0IGludGVyc2VjdGlvbiBvYmplY3QgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IGZ1bmN0aW9uICh4LCB5LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy5waWNrQWxsKHgsIHksIFtdLCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIHJldHVybiBvdXRbMF0gfHwgbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIGFsbCBpbnRlcnNlY3Rpb24gb2JqZWN0cywgd2ljaCB3aWxsIGJlIHNvcnRlZCBmcm9tIG5lYXIgdG8gZmFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge0FycmF5fSBbb3V0cHV0XVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge0FycmF5LjxjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb24+fVxyXG4gICAgICovXHJcbiAgICBwaWNrQWxsOiBmdW5jdGlvbiAoeCwgeSwgb3V0cHV0LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcmVlblRvTkRDKHgsIHksIHRoaXMuX25kYyk7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheSh0aGlzLl9uZGMsIHRoaXMuX3JheSk7XHJcblxyXG4gICAgICAgIG91dHB1dCA9IG91dHB1dCB8fCBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZSh0aGlzLnNjZW5lLCBvdXRwdXQsIGZvcmNlUGlja0FsbCB8fCBmYWxzZSk7XHJcblxyXG4gICAgICAgIG91dHB1dC5zb3J0KHRoaXMuX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdE5vZGU6IGZ1bmN0aW9uIChub2RlLCBvdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIGlmICgobm9kZSBpbnN0YW5jZW9mIFJlbmRlcmFibGUpICYmIG5vZGUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgaWYgKCghbm9kZS5pZ25vcmVQaWNraW5nIHx8IGZvcmNlUGlja0FsbClcclxuICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHRyaWFuZ2xlIG1lc2ggc3VwcG9ydCByYXkgcGlja2luZ1xyXG4gICAgICAgICAgICAgICAgICAgIChub2RlLm1vZGUgPT09IGdsZW51bS5UUklBTkdMRVMgJiYgbm9kZS5nZW9tZXRyeS5pc1VzZUluZGljZXMoKSlcclxuICAgICAgICAgICAgICAgICAgICAvLyBPciBpZiBnZW9tZXRyeSBoYXMgaXQncyBvd24gcGlja0J5UmF5LCBwaWNrLCBpbXBsZW1lbnRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja0J5UmF5XHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0UmVuZGVyYWJsZShub2RlLCBvdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZShub2RlLl9jaGlsZHJlbltpXSwgb3V0LCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdFJlbmRlcmFibGU6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgdmFyIHdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgb3V0KSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpO1xyXG4gICAgICAgICAgICByYXkuY29weSh0aGlzLl9yYXkpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LmludmVydCh3b3JsZEludmVyc2UsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2tpbm5lZCBtZXNoIHdpbGwgaWdub3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm0uXHJcbiAgICAgICAgICAgIGlmICghaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgcmF5LmFwcGx5VHJhbnNmb3JtKHdvcmxkSW52ZXJzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmJveCA9IGlzU2tpbm5lZE1lc2ggPyByZW5kZXJhYmxlLnNrZWxldG9uLmJvdW5kaW5nQm94IDogZ2VvbWV0cnkuYm91bmRpbmdCb3g7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmJveCAmJiAhcmF5LmludGVyc2VjdEJvdW5kaW5nQm94KGJib3gpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkucGljaykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucGljayhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZGMueCwgdGhpcy5fbmRjLnksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBvdXRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkucGlja0J5UmF5KSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrQnlSYXkocmF5LCByZW5kZXJhYmxlLCBvdXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VsbEJhY2sgPSAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkJBQ0sgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DQ1cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uRlJPTlQgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DVyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuICAgICAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgICAgIHZhciB3ZWlnaHRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy53ZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBqb2ludEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdmFsaWQuXHJcbiAgICAgICAgICAgIGlmICghcG9zaXRpb25BdHRyIHx8ICFwb3NpdGlvbkF0dHIudmFsdWUgfHwgIWluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzQXJyYXkgPSByZW5kZXJhYmxlLnNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIHJlbmRlcmFibGUuam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBza2luTWF0cmljZXNbaV0gPSBza2luTWF0cmljZXNbaV0gfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAxNjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXVtrXSA9IHNraW5NYXRyaWNlc0FycmF5W2kgKiAxNiArIGtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB3ZWlnaHQgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraW5uZWRQb3NpdGlvbkF0dHIgfHwgIXNraW5uZWRQb3NpdGlvbkF0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5jcmVhdGVBdHRyaWJ1dGUoJ3NraW5uZWRQb3NpdGlvbicsICdmJywgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuaW5pdChnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgd2VpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICBqb2ludEF0dHIuZ2V0KGksIGpvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRbM10gPSAxIC0gd2VpZ2h0WzBdIC0gd2VpZ2h0WzFdIC0gd2VpZ2h0WzJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2V0KHNraW5uZWRQb3MsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludFtrXSA+PSAwICYmIHdlaWdodFtrXSA+IDFlLTQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0bXAsIHBvcywgc2tpbk1hdHJpY2VzW2pvaW50W2tdXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNraW5uZWRQb3MsIHNraW5uZWRQb3MsIHRtcCwgd2VpZ2h0W2tdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLnNldChpLCBza2lubmVkUG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSBpbmRpY2VzW2kgKyAyXTtcclxuICAgICAgICAgICAgICAgIHZhciBmaW5hbFBvc0F0dHIgPSBpc1NraW5uZWRNZXNoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIDogcG9zaXRpb25BdHRyO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMSwgdjEuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMiwgdjIuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMywgdjMuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjdWxsQmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MiwgdjMsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSh2MSwgdjMsIHYyLCByZW5kZXJhYmxlLmN1bGxpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50VyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NChwb2ludFcsIHBvaW50LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gcG9pbnQgbWF5YmUgbm90IHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmNvcHkocG9pbnRXLCBwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBSYXlQaWNraW5nLkludGVyc2VjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQsIHBvaW50VywgcmVuZGVyYWJsZSwgW2kxLCBpMiwgaTNdLCBpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy5kaXN0KHBvaW50VywgdGhpcy5fcmF5Lm9yaWdpbilcclxuICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIF9pbnRlcnNlY3Rpb25Db21wYXJlRnVuYzogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb25cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludFdvcmxkXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSB0YXJnZXRcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdHJpYW5nbGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHRyaWFuZ2xlSW5kZXhcclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXHJcbiAqL1xyXG5SYXlQaWNraW5nLkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChwb2ludCwgcG9pbnRXb3JsZCwgdGFyZ2V0LCB0cmlhbmdsZSwgdHJpYW5nbGVJbmRleCwgZGlzdGFuY2UpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHBvaW50IGluIGxvY2FsIHRyYW5zZm9ybSBjb29yZGluYXRlc1xyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb2ludCA9IHBvaW50O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gd29ybGQgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50V29ybGQgPSBwb2ludFdvcmxkO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiB0cmlhbmdsZSwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgdmVydGV4IGluZGV4XHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGUgPSB0cmlhbmdsZTtcclxuICAgIC8qKlxyXG4gICAgICogSW5kZXggb2YgaW50ZXJzZWN0aW9uIHRyaWFuZ2xlLlxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyaWFuZ2xlSW5kZXggPSB0cmlhbmdsZUluZGV4O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGludGVyc2VjdGlvbiBwb2ludCB0byByYXkgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXlQaWNraW5nO1xyXG4iLCIvLyBTcGhlcmljYWwgSGFybW9uaWMgSGVscGVyc1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxudmFyIHNoID0ge307XHJcblxyXG5pbXBvcnQgcHJvamVjdEVudk1hcFNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvcHJvamVjdEVudk1hcC5nbHNsLmpzJztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLy8gUHJvamVjdCBvbiBncHUsIGJ1dCBuZWVkcyBicm93c2VyIHRvIHN1cHBvcnQgcmVhZFBpeGVscyBhcyBGbG9hdDMyQXJyYXkuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcEdQVShyZW5kZXJlciwgZW52TWFwKSB7XHJcbiAgICB2YXIgc2hUZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IDksXHJcbiAgICAgICAgaGVpZ2h0OiAxLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHByb2plY3RFbnZNYXBTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdURVhUVVJFX1NJWkUnLCBlbnZNYXAud2lkdGgpO1xyXG4gICAgcGFzcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcblxyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBmcmFtZWJ1ZmZlci5hdHRhY2goc2hUZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyBUT0RPIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IHN1cHBvcnQgRmxvYXQzMkFycmF5XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDQpO1xyXG4gICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscygwLCAwLCA5LCAxLCBUZXh0dXJlLlJHQkEsIFRleHR1cmUuRkxPQVQsIHBpeGVscyk7XHJcblxyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICBjb2VmZltpICogM10gPSBwaXhlbHNbaSAqIDRdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMV0gPSBwaXhlbHNbaSAqIDQgKyAxXTtcclxuICAgICAgICBjb2VmZltpICogMyArIDJdID0gcGl4ZWxzW2kgKiA0ICsgMl07XHJcbiAgICB9XHJcbiAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFybW9uaWNzKG5vcm1hbCwgaW5kZXgpe1xyXG4gICAgdmFyIHggPSBub3JtYWxbMF07XHJcbiAgICB2YXIgeSA9IG5vcm1hbFsxXTtcclxuICAgIHZhciB6ID0gbm9ybWFsWzJdO1xyXG5cclxuICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAxLjA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDIpIHtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNCkge1xyXG4gICAgICAgIHJldHVybiB4ICogejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA1KSB7XHJcbiAgICAgICAgcmV0dXJuIHkgKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDYpIHtcclxuICAgICAgICByZXR1cm4geCAqIHk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNykge1xyXG4gICAgICAgIHJldHVybiAzLjAgKiB6ICogeiAtIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB4ICogeCAtIHkgKiB5O1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgbm9ybWFsVHJhbnNmb3JtID0ge1xyXG4gICAgcHg6IFsyLCAxLCAwLCAtMSwgLTEsIDFdLFxyXG4gICAgbng6IFsyLCAxLCAwLCAxLCAtMSwgLTFdLFxyXG4gICAgcHk6IFswLCAyLCAxLCAxLCAtMSwgLTFdLFxyXG4gICAgbnk6IFswLCAyLCAxLCAxLCAxLCAxXSxcclxuICAgIHB6OiBbMCwgMSwgMiwgLTEsIC0xLCAtMV0sXHJcbiAgICBuejogWzAsIDEsIDIsIDEsIC0xLCAxXVxyXG59O1xyXG5cclxuLy8gUHJvamVjdCBvbiBjcHUuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcENQVShyZW5kZXJlciwgY3ViZVBpeGVscywgd2lkdGgsIGhlaWdodCkge1xyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgdmFyIG5vcm1hbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgdGV4ZWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGZldGNoTm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIGZvciAodmFyIG0gPSAwOyBtIDwgOTsgbSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0YXJnZXRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBwaXhlbHMgPSBjdWJlUGl4ZWxzW3RhcmdldHNba11dO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZGVSZXN1bHQgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IDA7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5vcm1hbFRyYW5zZm9ybVt0YXJnZXRzW2tdXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFswXSA9IHggLyAod2lkdGggLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gRmxpcCB5P1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsxXSA9IHkgLyAoaGVpZ2h0IC0gMS4wKSAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxbMl0gPSAtMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG5vcm1hbCwgbm9ybWFsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMF0gPSBub3JtYWxbdHJhbnNmb3JtWzBdXSAqIHRyYW5zZm9ybVszXTtcclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsxXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMV1dICogdHJhbnNmb3JtWzRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzJdID0gbm9ybWFsW3RyYW5zZm9ybVsyXV0gKiB0cmFuc2Zvcm1bNV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsyXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJHQk0gRGVjb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gcGl4ZWxzW2krK10gLyAyNTUgKiA4LjEyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdICo9IHNjYWxlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNpZGVSZXN1bHQsIHNpZGVSZXN1bHQsIHRleGVsLCBoYXJtb25pY3MoZmV0Y2hOb3JtYWwsIG0pICogLW5vcm1hbFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLW5vcm1hbC56IGVxdWFscyBjb3ModGhldGEpIG9mIExhbWJlcnRpYW5cclxuICAgICAgICAgICAgICAgICAgICBkaXZpZGVyICs9IC1ub3JtYWxbMl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChyZXN1bHQsIHJlc3VsdCwgc2lkZVJlc3VsdCwgMSAvIGRpdmlkZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29lZmZbbSAqIDNdID0gcmVzdWx0WzBdIC8gNi4wO1xyXG4gICAgICAgIGNvZWZmW20gKiAzICsgMV0gPSByZXN1bHRbMV0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAyXSA9IHJlc3VsdFsyXSAvIDYuMDtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IFt0ZXh0dXJlT3B0cy5sb2RdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNXVxyXG4gKi9cclxuc2gucHJvamVjdEVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBlbnZNYXAsIG9wdHMpIHtcclxuXHJcbiAgICAvLyBUT0RPIHNSR0JcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMubG9kID0gb3B0cy5sb2QgfHwgMDtcclxuXHJcbiAgICB2YXIgc2t5Ym94O1xyXG4gICAgdmFyIGR1bW15U2NlbmUgPSBuZXcgU2NlbmUoKTtcclxuICAgIHZhciBzaXplID0gNjQ7XHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNpemUgPSAoZW52TWFwLmltYWdlICYmIGVudk1hcC5pbWFnZS5weCkgPyBlbnZNYXAuaW1hZ2UucHgud2lkdGggOiBlbnZNYXAud2lkdGg7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgICAgIHNjZW5lOiBkdW1teVNjZW5lLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52TWFwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRvIHJnYm1cclxuICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciBoZWlnaHQgPSBNYXRoLmNlaWwoc2l6ZSAvIE1hdGgucG93KDIsIG9wdHMubG9kKSk7XHJcbiAgICB2YXIgcmdibVRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHRcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBza3lib3gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0VOQ09ERScpO1xyXG4gICAgaWYgKG9wdHMuZGVjb2RlUkdCTSkge1xyXG4gICAgICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fREVDT0RFJyk7XHJcbiAgICB9XHJcbiAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdsb2QnLCBvcHRzLmxvZCk7XHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHJnYm1UZXh0dXJlXHJcbiAgICB9KTtcclxuICAgIHZhciBjdWJlUGl4ZWxzID0ge307XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdWJlUGl4ZWxzW3RhcmdldHNbaV1dID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tpXSk7XHJcbiAgICAgICAgY2FtZXJhLmZvdiA9IDkwO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLmF0dGFjaChyZ2JtVGV4dHVyZSk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscyhcclxuICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCxcclxuICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLlVOU0lHTkVEX0JZVEUsIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV1cclxuICAgICAgICApO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2t5Ym94LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZ2JtVGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICByZXR1cm4gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNoO1xyXG4iLCJcclxuLyoqXHJcbiAqIEhlbHBlcnMgZm9yIGNyZWF0aW5nIGEgY29tbW9uIDNkIGFwcGxpY2F0aW9uLlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYXBwbGljYXRpb25cclxuICovXHJcblxyXG4gLy8gVE9ETyBjcmVhdGVDb21wb3NpdG9yXHJcbiAvLyBUT0RPIERpc3Bvc2UgdGVzdC4gZ2VvQ2FjaGUgdGVzdC5cclxuIC8vIFRPRE8gVG9uZW1hcHBpbmcgZXhwb3N1cmVcclxuIC8vIFRPRE8gZml0TW9kZWwuXHJcbiAvLyBUT0RPIFBhcnRpY2xlID9cclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9TY2VuZSc7XHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IEN1YmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9DdWJlJztcclxuaW1wb3J0IFNwaGVyZUdlbyBmcm9tICcuL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBQbGFuZUdlbyBmcm9tICcuL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0xURkxvYWRlciBmcm9tICcuL2xvYWRlci9HTFRGJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IERpcmVjdGlvbmFsTGlnaHQgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludExpZ2h0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBBbWJpZW50TGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50JztcclxuaW1wb3J0IEFtYmllbnRDdWJlbWFwTGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0hMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBTaGFkb3dNYXBQYXNzIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmF5UGlja2luZyBmcm9tICcuL3BpY2tpbmcvUmF5UGlja2luZyc7XHJcbmltcG9ydCBMUlVDYWNoZSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgc2hVdGlsIGZyb20gJy4vdXRpbC9zaCc7XHJcbmltcG9ydCB0ZXh0dXJlVXRpbCBmcm9tICcuL3V0aWwvdGV4dHVyZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4vc2hhZGVyL2J1aWx0aW4nO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcblxyXG52YXIgRVZFX05BTUVTID0gWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJyxcclxuICAgICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZScsXHJcbiAgICAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCdcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudH0gSW1hZ2VMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xIVE1MQ2FudmFzRWxlbWVudHxIVE1MSW1hZ2VFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8Y2xheS5UZXh0dXJlMkR9IFRleHR1cmVMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xBcnJheS48bnVtYmVyPn0gQ29sb3JcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7SFRNTEVsZW1lbnR8c3RyaW5nfSBEb21RdWVyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHAzRE5hbWVzcGFjZVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBpbml0IEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBpbml0aW5nIGFwcC5cclxuICogICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZXR1cm4gYSBwcm9taXNlIGluIGluaXQgdG8gc3RhcnQgdGhlIGxvb3AgYXN5bmNocm9ub3VzbHkgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbG9vcCBMb29wIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgZWFjaCBmcmFtZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b1JlbmRlcj10cnVlXSBJZiByZW5kZXIgYXV0b21hdGljYWxseSBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYmVmb3JlUmVuZGVyXVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYWZ0ZXJSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdIENvbnRhaW5lciB3aWR0aC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtoZWlnaHRdIENvbnRhaW5lciBoZWlnaHQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgRnVuY3Rpb24+fSBbbWV0aG9kc10gTWV0aG9kcyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgdG8gQXBwM0QjbWV0aG9kcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtncmFwaGljXSBHcmFwaGljIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNoYWRvdywgY29sb3Igc3BhY2UuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMuc2hhZG93PWZhbHNlXSBJZiBlbmFibGUgc2hhZG93XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMubGluZWFyPWZhbHNlXSBJZiB1c2UgbGluZWFyIGNvbG9yIHNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMudG9uZW1hcHBpbmc9ZmFsc2VdIElmIGVuYWJsZSBBQ0VTIHRvbmUgbWFwcGluZy5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZXZlbnQ9ZmFsc2VdIElmIGVuYWJsZSBtb3VzZS90b3VjaCBldmVudC4gSXQgd2lsbCBzbG93IGRvd24gdGhlIHN5c3RlbSBpZiBnZW9tZXRyaWVzIGFyZSBjb21wbGV4LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFuZGFyZE1hdGVyaWFsTVJDb25maWdcclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NoYWRlcj0nc3RhbmRhcmRNUiddXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtjb2xvcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFthbHBoYV1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttZXRhbG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcm91Z2huZXNzXVxyXG4gKiBAcHJvcGVydHkge0NvbG9yfSBbZW1pc3Npb25dXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZW1pc3Npb25JbnRlbnNpdHldXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50XVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZGlmZnVzZU1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW25vcm1hbE1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW3JvdWdobmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW21ldGFsbmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW2VtaXNzaXZlTWFwXVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBVc2luZyBBcHAzRCBpcyBhIG11Y2ggbW9yZSBjb252ZW5pZW50IHdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSB5b3VyIDNEIGFwcGxpY2F0aW9uLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0aWVzIHRvOlxyXG4gKlxyXG4gKiArIE1hbmFnZSBhcHBsaWNhdGlvbiBsb29wIGFuZCByZW5kZXJpbmcuXHJcbiAqICsgQ29sbGVjdCBHUFUgcmVzb3VyY2UgYXV0b21hdGljYWxseSB3aXRob3V0IG1lbW9yeSBsZWFrIGNvbmNlcm4uXHJcbiAqICsgTW91c2UgZXZlbnQgbWFuYWdlbWVudC5cclxuICogKyBDcmVhdGUgc2NlbmUgb2JqZWN0cywgbWF0ZXJpYWxzLCB0ZXh0dXJlcyB3aXRoIHNpbXBsZXIgY29kZS5cclxuICogKyBMb2FkIG1vZGVscyB3aXRoIG9uZSBsaW5lIG9mIGNvZGUuXHJcbiAqICsgUHJvbWlzZWQgaW50ZXJmYWNlcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgcm90YXRpbmcgY3ViZS5cclxuICpcclxuYGBganNcclxudmFyIGFwcCA9IGNsYXkuYXBwbGljYXRpb24uY3JlYXRlKCcjdmlld3BvcnQnLCB7XHJcbiAgICBpbml0OiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgcGVyc3BlY3RpdmUgY2FtZXJhLlxyXG4gICAgICAgIC8vIEZpcnN0IHBhcmFtZXRlciBpcyB0aGUgY2FtZXJhIHBvc2l0aW9uLiBXaGljaCBpcyBpbiBmcm9udCBvZiB0aGUgY3ViZS5cclxuICAgICAgICAvLyBTZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgbG9va0F0IHRhcmdldC4gV2hpY2ggaXMgdGhlIG9yaWdpbiBvZiB0aGUgd29ybGQsIGFuZCB3aGVyZSB0aGUgY3ViZSBwdXRzLlxyXG4gICAgICAgIHRoaXMuX2NhbWVyYSA9IGFwcC5jcmVhdGVDYW1lcmEoWzAsIDIsIDVdLCBbMCwgMCwgMF0pO1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIHNhbXBsZSBjdWJlXHJcbiAgICAgICAgdGhpcy5fY3ViZSA9IGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQuIFRoZSBkaXJlY3Rpb24gaXMgZnJvbSB0b3AgcmlnaHQgdG8gbGVmdCBib3R0b20sIGF3YXkgZnJvbSBjYW1lcmEuXHJcbiAgICAgICAgdGhpcy5fbWFpbkxpZ2h0ID0gYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdKTtcclxuICAgIH0sXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gU2ltcGx5IHJvdGF0aW5nIHRoZSBjdWJlIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICAgIHRoaXMuX2N1YmUucm90YXRpb24ucm90YXRlWShhcHAuZnJhbWVUaW1lIC8gMTAwMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEXHJcbiAqIEBwYXJhbSB7RG9tUXVlcnl9IGRvbSBDb250YWluZXIgZG9tIGVsZW1lbnQgb3IgYSBzZWxlY3RvciBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBgcXVlcnlTZWxlY3RvcmBcclxuICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICovXHJcbmZ1bmN0aW9uIEFwcDNEKGRvbSwgYXBwTlMpIHtcclxuXHJcbiAgICBhcHBOUyA9IGFwcE5TIHx8IHt9O1xyXG4gICAgYXBwTlMuZ3JhcGhpYyA9IGFwcE5TLmdyYXBoaWMgfHwge307XHJcblxyXG4gICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIGFwcE5TLmF1dG9SZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZG9tID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRvbSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZG9tJyk7IH1cclxuXHJcbiAgICB2YXIgaXNEb21DYW52YXMgPSAhZG9tLm5vZGVOYW1lICAvLyBOb3QgaW4gZG9tIGVudmlyb25tZW50XHJcbiAgICAgICAgfHwgZG9tLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdDQU5WQVMnO1xyXG5cclxuICAgIHZhciByZW5kZXJlck9wdHMgPSB7fTtcclxuICAgIGlzRG9tQ2FudmFzICYmIChyZW5kZXJlck9wdHMuY2FudmFzID0gZG9tKTtcclxuICAgIGFwcE5TLmRldmljZVBpeGVsUmF0aW8gJiYgKHJlbmRlcmVyT3B0cy5kZXZpY2VQaXhlbFJhdGlvID0gYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcblxyXG4gICAgdmFyIGdSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihyZW5kZXJlck9wdHMpO1xyXG4gICAgdmFyIGdXaWR0aCA9IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgIHZhciBnSGVpZ2h0ID0gYXBwTlMuaGVpZ2h0IHx8IGRvbS5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgdmFyIGdTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIGdUaW1lbGluZSA9IG5ldyBUaW1lbGluZSgpO1xyXG4gICAgdmFyIGdTaGFkb3dQYXNzID0gYXBwTlMuZ3JhcGhpYy5zaGFkb3cgJiYgbmV3IFNoYWRvd01hcFBhc3MoKTtcclxuICAgIHZhciBnUmF5UGlja2luZyA9IGFwcE5TLmV2ZW50ICYmIG5ldyBSYXlQaWNraW5nKHtcclxuICAgICAgICBzY2VuZTogZ1NjZW5lLFxyXG4gICAgICAgIHJlbmRlcmVyOiBnUmVuZGVyZXJcclxuICAgIH0pO1xyXG5cclxuICAgICFpc0RvbUNhbnZhcyAmJiBkb20uYXBwZW5kQ2hpbGQoZ1JlbmRlcmVyLmNhbnZhcyk7XHJcblxyXG4gICAgZ1JlbmRlcmVyLnJlc2l6ZShnV2lkdGgsIGdIZWlnaHQpO1xyXG5cclxuICAgIHZhciBnRnJhbWVUaW1lID0gMDtcclxuICAgIHZhciBnRWxhcHNlZFRpbWUgPSAwO1xyXG5cclxuICAgIGdUaW1lbGluZS5zdGFydCgpO1xyXG5cclxuICAgIHZhciB1c2VyTWV0aG9kcyA9IHt9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIGFwcE5TLm1ldGhvZHMpIHtcclxuICAgICAgICB1c2VyTWV0aG9kc1trZXldID0gYXBwTlMubWV0aG9kc1trZXldLmJpbmQoYXBwTlMsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWluZXIgZG9tIGVsZW1lbnRcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2NvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb207IH0gfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3JlbmRlcmVyXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVuZGVyZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXI7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTY2VuZTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN0aW1lbGluZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1RpbWVsaW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgbGFzdCBmcmFtZS4gQ2FuIGJlIHVzZWQgaW4gbG9vcCB0byBjYWxjdWxhdGUgdGhlIG1vdmVtZW50LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZnJhbWVUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcmFtZVRpbWU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnRnJhbWVUaW1lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgYXBwbGljYXRpb24gY3JlYXRlZC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2VsYXBzZWRUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbGFwc2VkVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdFbGFwc2VkVGltZTsgfX0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdpZHRoIG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHdpZHRoOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldFdpZHRoKCk7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhlaWdodCBvZiB2aWV3cG9ydC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaGVpZ2h0OiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldEhlaWdodCgpOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWV0aG9kcyBmcm9tIHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZX1cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI21ldGhvZHNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGhvZHM6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1c2VyTWV0aG9kczsgfSB9LFxyXG5cclxuICAgICAgICBfc2hhZG93UGFzczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTaGFkb3dQYXNzOyB9IH0sXHJcblxyXG4gICAgICAgIF9hcHBOUzogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFwcE5TOyB9IH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgYXBwbGljYXRpb24uIFdpbGwgdXNlIHRoZSBjb250YWluZXIgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IGlmIHdpZHRoL2hlaWdodCBpbiBwYXJhbWV0ZXJzIGFyZSBub3QgZ2l2ZW4uXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBtZW1iZXJPZiB7Y2xheS5hcHBsaWNhdGlvbi5BcHAzRH1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGdXaWR0aCA9IHdpZHRoIHx8IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgICAgICBnSGVpZ2h0ID0gaGVpZ2h0IHx8IGRvbS5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuICAgICAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSB0aGUgYXBwbGljYXRpb25cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoYXBwTlMuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICBhcHBOUy5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBnVGltZWxpbmUuc3RvcCgpO1xyXG4gICAgICAgIGdSZW5kZXJlci5kaXNwb3NlU2NlbmUoZ1NjZW5lKTtcclxuICAgICAgICBnU2hhZG93UGFzcyAmJiBnU2hhZG93UGFzcy5kaXNwb3NlKGdSZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGRvbS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoZXZlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzW21ha2VIYW5kbGVyTmFtZShldmVUeXBlKV0gJiYgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCBtYWtlSGFuZGxlck5hbWUoZXZlVHlwZSkpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBnUmF5UGlja2luZyAmJiB0aGlzLl9pbml0TW91c2VFdmVudHMoZ1JheVBpY2tpbmcpO1xyXG5cclxuICAgIHRoaXMuX2dlb0NhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuICAgIHRoaXMuX3RleENhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuXHJcbiAgICAvLyBHUFUgUmVzb3VyY2VzLlxyXG4gICAgdGhpcy5fdGV4dHVyZXNMaXN0ID0ge307XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IHt9O1xyXG5cclxuICAgIC8vIERvIGluaXQgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgdmFyIGluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGFwcE5TLmluaXQgJiYgYXBwTlMuaW5pdCh0aGlzKSk7XHJcbiAgICAvLyBVc2UgdGhlIGluaXRlZCBjYW1lcmEuXHJcbiAgICBnUmF5UGlja2luZyAmJiAoZ1JheVBpY2tpbmcuY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKSk7XHJcblxyXG4gICAgaWYgKCFhcHBOUy5sb29wKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdNaXNzIGxvb3AgbWV0aG9kLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGdUaW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgICAgIGdGcmFtZVRpbWUgPSBmcmFtZVRpbWU7XHJcbiAgICAgICAgICAgIGdFbGFwc2VkVGltZSArPSBmcmFtZVRpbWU7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmFzcGVjdCA9IGdSZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBjYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgYXBwTlMubG9vcCAmJiBhcHBOUy5sb29wKHNlbGYpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGYuY29sbGVjdFJlc291cmNlcygpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZ1NjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHJlbmRlckxpc3QpIHtcclxuICAgICAgICBpZiAodGhpcy5faW5SZW5kZXIpIHtcclxuICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgZ3JhcGhpYyBvcHRpb25zIHdoZW4gdXNpbmcgI3JlbmRlciBmdW5jdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC5vcGFxdWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC50cmFuc3BhcmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHRoaXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBJbWFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSW1hZ2UpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MVmlkZW9FbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0S2V5RnJvbUltYWdlTGlrZSh2YWwpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdmFsIDogKHZhbC5fX2tleV9fIHx8ICh2YWwuX19rZXlfXyA9IHV0aWwuZ2VuR1VJRCgpKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSB7XHJcbiAgICByZXR1cm4gJ18nICsgZXZlVHlwZSArICdIYW5kbGVyJztcclxufVxyXG5cclxuZnVuY3Rpb24gcGFja2FnZUV2ZW50KGV2ZW50VHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgd2hlZWxEZWx0YSkge1xyXG4gICAgdmFyIGV2ZW50ID0gdXRpbC5jbG9uZShwaWNrUmVzdWx0KTtcclxuICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XHJcbiAgICBldmVudC5vZmZzZXRYID0gb2Zmc2V0WDtcclxuICAgIGV2ZW50Lm9mZnNldFkgPSBvZmZzZXRZO1xyXG4gICAgaWYgKHdoZWVsRGVsdGEgIT09IG51bGwpIHtcclxuICAgICAgICBldmVudC53aGVlbERlbHRhID0gd2hlZWxEZWx0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBldmVudDtcclxufVxyXG5cclxuZnVuY3Rpb24gYnViYmxpbmdFdmVudCh0YXJnZXQsIGV2ZW50KSB7XHJcbiAgICB3aGlsZSAodGFyZ2V0ICYmICFldmVudC5jYW5jZWxCdWJibGUpIHtcclxuICAgICAgICB0YXJnZXQudHJpZ2dlcihldmVudC50eXBlLCBldmVudCk7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmdldFBhcmVudCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2luaXRNb3VzZUV2ZW50cyA9IGZ1bmN0aW9uIChyYXlQaWNraW5nKSB7XHJcbiAgICB2YXIgZG9tID0gdGhpcy5jb250YWluZXI7XHJcblxyXG4gICAgdmFyIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoX2V2ZVR5cGUpIHtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sIF9ldmVUeXBlLCB0aGlzW21ha2VIYW5kbGVyTmFtZShfZXZlVHlwZSldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFyYXlQaWNraW5nLmNhbWVyYSkgeyAvLyBOb3QgaGF2ZSBjYW1lcmEgeWV0LlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJveCA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFgsIG9mZnNldFk7XHJcbiAgICAgICAgICAgIHZhciBldmVUeXBlID0gX2V2ZVR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZS5pbmRleE9mKCd0b3VjaCcpID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciB0b3VjaCA9IGV2ZVR5cGUgIT09ICd0b3VjaGVuZCdcclxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0VG91Y2hlc1swXVxyXG4gICAgICAgICAgICAgICAgICAgIDogZS5jaGFuZ2VkVG91Y2hlc1swXTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVUeXBlID09PSAndG91Y2hzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlZG93bic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVUeXBlID09PSAndG91Y2hlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZXVwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZW1vdmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHRvdWNoLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSB0b3VjaC5jbGllbnRZIC0gYm94LnRvcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldFggPSBlLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSBlLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHJheVBpY2tpbmcucGljayhvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdET01Nb3VzZVNjcm9sbCcgfHwgZXZlVHlwZSA9PT0gJ21vdXNld2hlZWwnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWx0YSA9IChlLndoZWVsRGVsdGEpID8gZS53aGVlbERlbHRhIC8gMTIwIDogLShlLmRldGFpbCB8fCAwKSAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBKdXN0IGlnbm9yZSBzaWxlbnQgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0LnRhcmdldC5zaWxlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElORyB0b3VjaGRvd24gc2hvdWxkIHRyaWdnZXIgbW91c2VvdmVyIGV2ZW50ID9cclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9IHBpY2tSZXN1bHQudGFyZ2V0ICE9PSBvbGRUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVGFyZ2V0ICYmIGJ1YmJsaW5nRXZlbnQob2xkVGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3V0Jywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlbW92ZScsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3ZlcicsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoZXZlVHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgZGVsdGEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IHBpY2tSZXN1bHQudGFyZ2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9sZFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgIH0sIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sIHRoaXMpO1xyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl91cGRhdGVHcmFwaGljT3B0aW9ucyA9IGZ1bmN0aW9uIChncmFwaGljT3B0cywgbGlzdCwgaXNTa3lib3gpIHtcclxuICAgIHZhciBlbmFibGVUb25lbWFwcGluZyA9ICEhZ3JhcGhpY09wdHMudG9uZW1hcHBpbmc7XHJcbiAgICB2YXIgaXNMaW5lYXJTcGFjZSA9ICEhZ3JhcGhpY09wdHMubGluZWFyO1xyXG5cclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG1hdCA9IGxpc3RbaV0ubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKG1hdCA9PT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW5hYmxlVG9uZW1hcHBpbmcgPyBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpIDogbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpO1xyXG4gICAgICAgIGlmIChpc0xpbmVhclNwYWNlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvZGVTUkdCID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGlzU2t5Ym94ICYmIG1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykgJiYgIW1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykuc1JHQikge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlU1JHQiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY29kZVNSR0IgJiYgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl9kb1JlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUpIHtcclxuICAgIHZhciBjYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRG8gcmVuZGVyXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSB0cnVlO1xyXG4gICAgdmFyIGFwcE5TID0gdGhpcy5fYXBwTlM7XHJcbiAgICBhcHBOUy5iZWZvcmVSZW5kZXIgJiYgYXBwTlMuYmVmb3JlUmVuZGVyKHNlbGYpO1xyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgdmFyIHNoYWRvd1Bhc3MgPSB0aGlzLl9zaGFkb3dQYXNzO1xyXG5cclxuICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgdmFyIHNreWJveExpc3QgPSBbXTtcclxuICAgIHNjZW5lLnNreWJveCAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5Ym94KTtcclxuICAgIHNjZW5lLnNreWRvbWUgJiYgc2t5Ym94TGlzdC5wdXNoKHNjZW5lLnNreWRvbWUpO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUdyYXBoaWNPcHRpb25zKGFwcE5TLmdyYXBoaWMsIHNreWJveExpc3QsIHRydWUpO1xyXG4gICAgLy8gUmVuZGVyIHNoYWRvdyBwYXNzXHJcbiAgICBzaGFkb3dQYXNzICYmIHNoYWRvd1Bhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgbnVsbCwgdHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5fZG9SZW5kZXIocmVuZGVyZXIsIHNjZW5lLCB0cnVlKTtcclxuXHJcbiAgICBhcHBOUy5hZnRlclJlbmRlciAmJiBhcHBOUy5hZnRlclJlbmRlcihzZWxmKTtcclxuICAgIHRoaXMuX2luUmVuZGVyID0gZmFsc2U7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuY29sbGVjdFJlc291cmNlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgdmFyIHRleHR1cmVzTGlzdCA9IHRoaXMuX3RleHR1cmVzTGlzdDtcclxuICAgIHZhciBnZW9tZXRyaWVzTGlzdCA9IHRoaXMuX2dlb21ldHJpZXNMaXN0O1xyXG4gICAgLy8gTWFyayBhbGwgcmVzb3VyY2VzIHVudXNlZDtcclxuICAgIG1hcmtVbnVzZWQodGV4dHVyZXNMaXN0KTtcclxuICAgIG1hcmtVbnVzZWQoZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIC8vIENvbGxlY3QgcmVzb3VyY2VzIHVzZWQgaW4gdGhpcyBmcmFtZS5cclxuICAgIHZhciBuZXdUZXh0dXJlc0xpc3QgPSBbXTtcclxuICAgIHZhciBuZXdHZW9tZXRyaWVzTGlzdCA9IFtdO1xyXG4gICAgY29sbGVjdFJlc291cmNlcyhzY2VuZSwgbmV3VGV4dHVyZXNMaXN0LCBuZXdHZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gRGlzcG9zZSB0aG9zZSB1bnNlZCByZXNvdXJjZXMuXHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHRleHR1cmVzTGlzdCk7XHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIGdlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSBuZXdUZXh0dXJlc0xpc3Q7XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IG5ld0dlb21ldHJpZXNMaXN0O1xyXG59O1xyXG5cclxuXHJcbmZ1bmN0aW9uIG1hcmtVbnVzZWQocmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc291cmNlTGlzdFtpXS5fX3VzZWQgPSAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHJlc291cmNlTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoIXJlc291cmNlTGlzdFtpXS5fX3VzZWQpIHtcclxuICAgICAgICAgICAgcmVzb3VyY2VMaXN0W2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlVXNlZChyZXNvdXJjZSwgbGlzdCkge1xyXG4gICAgcmVzb3VyY2UuX191c2VkID0gcmVzb3VyY2UuX191c2VkIHx8IDA7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQrKztcclxuICAgIGlmIChyZXNvdXJjZS5fX3VzZWQgPT09IDEpIHtcclxuICAgICAgICAvLyBEb24ndCBwdXNoIHRvIHRoZSBsaXN0IHR3aWNlLlxyXG4gICAgICAgIGxpc3QucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29sbGVjdFJlc291cmNlcyhzY2VuZSwgdGV4dHVyZVJlc291cmNlTGlzdCwgZ2VvbWV0cnlSZXNvdXJjZUxpc3QpIHtcclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICB2YXIgcHJldkdlb21ldHJ5O1xyXG4gICAgc2NlbmUudHJhdmVyc2UoZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETyBvcHRpbWl6ZSEhXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbCAhPT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVXNlZCh2YWxba10sIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSAhPT0gcHJldkdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKGdlb21ldHJ5LCBnZW9tZXRyeVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICBwcmV2R2VvbWV0cnkgPSBnZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIC8vIFRyYWNrIEFtYmllbnRDdWJlbWFwXHJcbiAgICAgICAgaWYgKHNjZW5lLmxpZ2h0c1trXS5jdWJlbWFwKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVVzZWQoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXAsIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogTG9hZCBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9dHJ1ZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBTPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBTfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFQ9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFR9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5tYWdGaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWFnRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZXhwb3N1cmVdIE9ubHkgYmUgdXNlZCB3aGVuIHNvdXJjZSBpcyBhIEhEUiBpbWFnZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbdXNlQ2FjaGVdIElmIHVzZSBjYWNoZS5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZSgnZGlmZnVzZU1hcC5qcGcnKVxyXG4gKiAgICAgIC50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgICAgIG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIHRleHR1cmUpO1xyXG4gKiAgICAgIH0pO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzLCB1c2VDYWNoZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JbWFnZUxpa2UodXJsT3JJbWcpO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RleENhY2hlLmdldChrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXhDYWNoZS5nZXQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIFByb21pc2UgP1xyXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSBzZWxmLmxvYWRUZXh0dXJlU3luYyh1cmxPckltZywgb3B0cyk7XHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4Q2FjaGUucHV0KGtleSwgcHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycsIHtcclxuICogICAgICBhbmlzb3Ryb3BpYzogOCxcclxuICogICAgICBmbGlwWTogZmFsc2VcclxuICogIH0pO1xyXG4gKiAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVTeW5jID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzKSB7XHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQob3B0cyk7XHJcbiAgICBpZiAodHlwZW9mIHVybE9ySW1nID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh1cmxPckltZy5tYXRjaCgvLmhkciR8XmRhdGE6YXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vKSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZVV0aWwubG9hZFRleHR1cmUodXJsT3JJbWcsIHtcclxuICAgICAgICAgICAgICAgIGV4cG9zdXJlOiBvcHRzICYmIG9wdHMuZXhwb3N1cmUsXHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZTogJ2hkcidcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50cmlnZ2VyKCdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVtrZXldID0gb3B0c1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJsT3JJbWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzSW1hZ2VMaWtlRWxlbWVudCh1cmxPckltZykpIHtcclxuICAgICAgICB0ZXh0dXJlLmltYWdlID0gdXJsT3JJbWc7XHJcbiAgICAgICAgdGV4dHVyZS5keW5hbWljID0gdXJsT3JJbWcgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSkudGhlbihmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gKiAgICAgIHNreWJveC5zZXRFbnZpcm9ubWVudE1hcCh0ZXh0dXJlKTtcclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKGltZ0xpc3QsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IHRoaXMubG9hZFRleHR1cmVDdWJlU3luYyhpbWdMaXN0LCBvcHRzKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRleHR1cmVDdWJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGV4dHVyZUN1YmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmVDdWJlKTtcclxuICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPWZhbHNlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAqIEBleGFtcGxlXHJcbiAqICB2YXIgdGV4dHVyZSA9IGFwcC5sb2FkVGV4dHVyZUN1YmVTeW5jKHtcclxuICogICAgICBweDogJ3NreWJveC9weC5qcGcnLCBweTogJ3NreWJveC9weS5qcGcnLCBwejogJ3NreWJveC9wei5qcGcnLFxyXG4gKiAgICAgIG54OiAnc2t5Ym94L254LmpwZycsIG55OiAnc2t5Ym94L255LmpwZycsIG56OiAnc2t5Ym94L256LmpwZydcclxuICogIH0pO1xyXG4gKiAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlQ3ViZVN5bmMgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBvcHRzLmZsaXBZID0gb3B0cy5mbGlwWSB8fCBmYWxzZTtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZShvcHRzKTtcclxuICAgIGlmICghaW1nTGlzdCB8fCAhaW1nTGlzdC5weCB8fCAhaW1nTGlzdC5ueCB8fCAhaW1nTGlzdC5weSB8fCAhaW1nTGlzdC5ueSB8fCAhaW1nTGlzdC5weiB8fCAhaW1nTGlzdC5ueikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjdWJlbWFwIGZvcm1hdC4gU2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgcHgsbngscHksbnkscHosbnonKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaW1nTGlzdC5weCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5sb2FkKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGV4dHVyZUN1YmUuaW1hZ2UgPSB1dGlsLmNsb25lKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmVDdWJlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG1hdGVyaWFsLlxyXG4gKiBAcGFyYW0ge09iamVjdHxTdGFuZGFyZE1hdGVyaWFsTVJDb25maWd9IG1hdGVyaWFsQ29uZmlnLiBtYXRlcmlhbENvbmZpZyBjb250YWlucyBgc2hhZGVyYCwgYHRyYW5zcGFyZW50YCBhbmQgdW5pZm9ybXMgdGhhdCB1c2VkIGluIGNvcnJlc3BvbmRpbmcgdW5pZm9ybXMuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pZm9ybXMgY2FuIGJlIGBjb2xvcmAsIGBhbHBoYWAgYGRpZmZ1c2VNYXBgIGV0Yy5cclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtzaGFkZXI9J2NsYXkuc3RhbmRhcmRNUiddIERlZmF1bHQgdG8gYmUgc3RhbmRhcmQgc2hhZGVyIHdpdGggbWV0YWxuZXNzIGFuZCByb3VnaG5lc3Mgd29ya2Zsb3cuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50PWZhbHNlXSBJZiBtYXRlcmlhbCBpcyB0cmFuc3BhcmVudC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RleHR1cmVGbGlwWT10cnVlXSBJZiBmbGlwIHkgb2YgdGV4dHVyZS5cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3RleHR1cmVMb2FkZWRdIENhbGxiYWNrIHdoZW4gc2luZ2xlIHRleHR1cmUgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZXNSZWFkeV0gQ2FsbGJhY2sgd2hlbiBhbGwgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTWF0ZXJpYWwgPSBmdW5jdGlvbiAobWF0Q29uZmlnKSB7XHJcbiAgICBtYXRDb25maWcgPSBtYXRDb25maWcgfHwge307XHJcbiAgICBtYXRDb25maWcuc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZE1SJztcclxuICAgIHZhciBzaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyID8gbWF0Q29uZmlnLnNoYWRlciA6IHNoYWRlckxpYnJhcnkuZ2V0KG1hdENvbmZpZy5zaGFkZXIpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBpZiAobWF0Q29uZmlnLm5hbWUpIHtcclxuICAgICAgICBtYXRlcmlhbC5uYW1lID0gbWF0Q29uZmlnLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRleHR1cmVzTG9hZGluZyA9IFtdO1xyXG4gICAgZnVuY3Rpb24gbWFrZVRleHR1cmVTZXR0ZXIoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQgJiYgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQoa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAobWF0ZXJpYWwudW5pZm9ybXNba2V5XSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gbWF0Q29uZmlnW2tleV07XHJcbiAgICAgICAgICAgIGlmICgobWF0ZXJpYWwudW5pZm9ybXNba2V5XS50eXBlID09PSAndCcgfHwgaXNJbWFnZUxpa2VFbGVtZW50KHZhbCkpXHJcbiAgICAgICAgICAgICAgICAmJiAhKHZhbCBpbnN0YW5jZW9mIFRleHR1cmUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvYWQgYSB0ZXh0dXJlLlxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNMb2FkaW5nLnB1c2godGhpcy5sb2FkVGV4dHVyZSh2YWwsIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IG1hdENvbmZpZy50ZXh0dXJlQ29udmVydFRvUE9UIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaXBZOiBtYXRDb25maWcudGV4dHVyZUZsaXBZID09IG51bGwgPyB0cnVlIDogbWF0Q29uZmlnLnRleHR1cmVGbGlwWVxyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtYWtlVGV4dHVyZVNldHRlcihrZXkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Q29uZmlnLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgbWF0Q29uZmlnLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgIG1hdENvbmZpZy50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmIChtYXRDb25maWcudGV4dHVyZXNSZWFkeSkge1xyXG4gICAgICAgIFByb21pc2UuYWxsKHRleHR1cmVzTG9hZGluZykudGhlbihmdW5jdGlvbiAodGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVzUmVhZHkodGV4dHVyZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXRlcmlhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjdWJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGgsIGhlaWdodCBhbmQgZGVwdGggZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSB3aGl0ZSBjdWJlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZ2VvS2V5ID0gJ2N1YmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgY3ViZSA9IHRoaXMuX2dlb0NhY2hlLmdldChnZW9LZXkpO1xyXG4gICAgaWYgKCFjdWJlKSB7XHJcbiAgICAgICAgY3ViZSA9IG5ldyBDdWJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goY3ViZSwgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCB0aGF0IGNhbWVyYSBpcyBpbnNpZGUgdGhlIGN1YmUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUgaW5zaWRlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmVJbnNpZGUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmVJbnNpZGUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZUluc2lkZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICBpbnNpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXSxcclxuICAgICAgICAgICAgZGVwdGhTZWdtZW50czogc3ViZGl2WzJdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3ViZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgY3ViZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BoZXJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdWJkaXZpc2lvbj0yMF0gU3ViZGl2aXNpb24gb2Ygc3BoZXJlLlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSBzZW1pLXRyYW5zcGFyZW50IHNwaGVyZS5cclxuICogIGFwcC5jcmVhdGVTcGhlcmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMCwgMCwgMV0sXHJcbiAqICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAqICAgICAgYWxwaGE6IDAuNVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcGhlcmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdmlzaW9uKSB7XHJcbiAgICBpZiAoc3ViZGl2aXNpb24gPT0gbnVsbCkge1xyXG4gICAgICAgIHN1YmRpdmlzaW9uID0gMjA7XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3NwaGVyZS0nICsgc3ViZGl2aXNpb247XHJcbiAgICB2YXIgc3BoZXJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXNwaGVyZSkge1xyXG4gICAgICAgIHNwaGVyZSA9IG5ldyBTcGhlcmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZpc2lvbiAqIDIsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZpc2lvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwaGVyZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgc3BoZXJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goc3BoZXJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vLyBUT0RPIG1heSBiZSBtb2RpZmllZD9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBsYW5lIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBwbGFuZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSByZWQgY29sb3IgcGxhbmUuXHJcbiAqICBhcHAuY3JlYXRlUGxhbmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMSwgMCwgMF1cclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGxhbmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdl07XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3BsYW5lLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIHBsYW5lR2VvID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXBsYW5lR2VvKSB7XHJcbiAgICAgICAgcGxhbmVHZW8gPSBuZXcgUGxhbmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV1cclxuICAgICAgICB9KTtcclxuICAgICAgICBwbGFuZUdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgcGxhbmVHZW8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChwbGFuZUdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBtZXNoIHdpdGggcGFyYW1ldHJpYyBzdXJmYWNlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBnZW5lcmF0b3JcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnhcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnpcclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci51PVswLCAxLCAwLjA1XV1cclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBhcmFtZXRyaWNTdXJmYWNlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBnZW5lcmF0b3IpIHtcclxuICAgIHZhciBnZW8gPSBuZXcgUGFyYW1ldHJpY1N1cmZhY2VHZW8oe1xyXG4gICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdG9yXHJcbiAgICB9KTtcclxuICAgIGdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBnZW5lcmFsIG1lc2ggd2l0aCBnaXZlbiBnZW9tZXRyeSBpbnN0YW5jZSBhbmQgbWF0ZXJpYWwgY29uZmlnLlxyXG4gKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNZXNoID0gZnVuY3Rpb24gKGdlb21ldHJ5LCBtYXQsIHBhcmVudE5vZGUpIHtcclxuICAgIHZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0IGluc3RhbmNlb2YgTWF0ZXJpYWwgPyBtYXQgOiB0aGlzLmNyZWF0ZU1hdGVyaWFsKG1hdClcclxuICAgIH0pO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG1lc2gpO1xyXG4gICAgcmV0dXJuIG1lc2g7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGVtcHR5IG5vZGVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHBhcmVudE5vZGVcclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG5vZGUpO1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcGVyc3BlY3RpdmUgb3Igb3J0aG9ncmFwaGljIGNhbWVyYSBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSB0YXJnZXRcclxuICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPVwicGVyc3BlY3RpdmVcIl0gQ2FuIGJlICdwZXJzcGVjdGl2ZScgb3IgJ29ydGhvZ3JhcGhpYycoaW4gc2hvcnQgJ29ydGhvJylcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IFtleHRlbnRdIEV4dGVudCBpcyBhdmFpbGFibGUgb25seSBpZiB0eXBlIGlzIG9ydGhvZ3JhcGhpYy5cclxuICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV8Y2xheS5jYW1lcmEuT3J0aG9ncmFwaGljfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUNhbWVyYSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgdGFyZ2V0LCB0eXBlLCBleHRlbnQpIHtcclxuICAgIHZhciBDYW1lcmFDdG9yO1xyXG4gICAgdmFyIGlzT3J0aG8gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSAnb3J0aG8nIHx8IHR5cGUgPT09ICdvcnRob2dyYXBoaWMnKSB7XHJcbiAgICAgICAgaXNPcnRobyA9IHRydWU7XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IE9ydGhvZ3JhcGhpY0NhbWVyYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlICYmIHR5cGUgIT09ICdwZXJzcGVjdGl2ZScpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGNhbWVyYSB0eXBlICcgKyB0eXBlICsgJy4gVXNlIGRlZmF1bHQgcGVyc3BlY3RpdmUgY2FtZXJhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIENhbWVyYUN0b3IgPSBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2FtZXJhID0gbmV3IENhbWVyYUN0b3IoKTtcclxuICAgIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uY29weShwb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgY2FtZXJhLmxvb2tBdCh0YXJnZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlbnQgJiYgaXNPcnRobykge1xyXG4gICAgICAgIGV4dGVudCA9IGV4dGVudC5hcnJheSB8fCBleHRlbnQ7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtZXh0ZW50WzBdIC8gMjtcclxuICAgICAgICBjYW1lcmEucmlnaHQgPSBleHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBleHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtZXh0ZW50WzFdIC8gMjtcclxuICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGV4dGVudFsyXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLnJlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zY2VuZS5hZGQoY2FtZXJhKTtcclxuXHJcbiAgICByZXR1cm4gY2FtZXJhO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGRpcmVjdGlvbmFsIGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gZGlyIEEgVmVjdG9yMyBvciBhcnJheSB0byByZXByZXNlbnQgdGhlIGRpcmVjdGlvbi5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5XSBJbnRlbnNpdHkgb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0KFstMSwgLTEsIC0xXSwgJyNmZmYnLCAyKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0ID0gZnVuY3Rpb24gKGRpciwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoKTtcclxuICAgIGlmIChkaXIgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgZGlyID0gZGlyLmFycmF5O1xyXG4gICAgfVxyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkoZGlyKS5uZWdhdGUoKTtcclxuICAgIGxpZ2h0Lmxvb2tBdChWZWN0b3IzLlpFUk8pO1xyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BvdCBsaWdodCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBzcG90IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW3RhcmdldF0gVGFyZ2V0IHBvc2l0aW9uIHdoZXJlIHNwb3QgbGlnaHQgcG9pbnRzIHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTIwXSBGYWxsb2ZmIHJhbmdlIG9mIHNwb3QgbGlnaHQuIERlZmF1bHQgdG8gYmUgMjAuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBzcG90IGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdW1icmFBbmdsZT0zMF0gVW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAzMCBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGVudW1icmFBbmdsZT00NV0gUGVudW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSA0NSBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICBhcHAuY3JlYXRlU3BvdExpZ2h0KFs1LCA1LCA1XSwgWzAsIDAsIDBdLCAyMCwgIzkwMCk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlU3BvdExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5LCB1bWJyYUFuZ2xlLCBwZW51bWJyYUFuZ2xlKSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgU3BvdExpZ2h0KCk7XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgbGlnaHQubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG4gICAgdW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC51bWJyYUFuZ2xlID0gdW1icmFBbmdsZSk7XHJcbiAgICBwZW51bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSBwZW51bWJyYUFuZ2xlKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgcG9pbnQgbGlnaHQuLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTEwMF0gRmFsbG9mZiByYW5nZSBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBwb2ludCBsaWdodC5cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQb2ludExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCByYW5nZSwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yKGNvbG9yKTtcclxuICAgIH1cclxuICAgIHJhbmdlICE9IG51bGwgJiYgKGxpZ2h0LnJhbmdlID0gcmFuZ2UpO1xyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBhbWJpZW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRMaWdodCA9IGZ1bmN0aW9uIChjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KCk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBjdWJlbWFwIGFtYmllbnQgbGlnaHQgYW5kIGFuIHNwaGVyaWNhbCBoYXJtb25pYyBhbWJpZW50IGxpZ2h0XHJcbiAqIGZvciBzcGVjdWxhciBhbmQgZGlmZnVzZSBsaWdodGluZyBpbiBQQlIgcmVuZGVyaW5nXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfFRleHR1cmVDdWJlfSBbZW52SW1hZ2VdIFBhbm9yYW1hIGVudmlyb25tZW50IGltYWdlLCBIRFIgZm9ybWF0IGlzIGJldHRlci4gT3IgYSBwcmUgbG9hZGVkIHRleHR1cmUgY3ViZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NwZWN1bGFySW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBzcGVjdWxhciBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtkaWZmdXNlSW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBkaWZmdXNlIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2V4cG9zdXJlPTFdIEV4cG9zdXJlIG9mIEhEUiBpbWFnZS4gT25seSBpZiBpbWFnZSBpbiBmaXJzdCBwYXJhbXRlciBpcyBIRFIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZT0zMl0gVGhlIHNpemUgb2YgcHJlZmlsZXJ0ZWQgY3ViZW1hcC4gTGFyZ2VyIHZhbHVlIHdpbGwgdGFrZSBtb3JlIHRpbWUgdG8gZG8gZXhwZW5zaXZlIHByZWZpbHRlcmluZy5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVBbWJpZW50Q3ViZW1hcExpZ2h0ID0gZnVuY3Rpb24gKGVudkltYWdlLCBzcGVjSW50ZW5zaXR5LCBkaWZmSW50ZW5zaXR5LCBleHBvc3VyZSwgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICBleHBvc3VyZSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9IDMyO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcblxyXG4gICAgdmFyIGxvYWRQcm9taXNlO1xyXG4gICAgaWYgKGVudkltYWdlLnRleHR1cmVUeXBlID09PSAndGV4dHVyZUN1YmUnKSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSBlbnZJbWFnZS5pc1JlbmRlcmFibGUoKVxyXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShlbnZJbWFnZSlcclxuICAgICAgICAgICAgOiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBlbnZJbWFnZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVudkltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxvYWRQcm9taXNlID0gdGhpcy5sb2FkVGV4dHVyZShlbnZJbWFnZSwge1xyXG4gICAgICAgICAgICBleHBvc3VyZTogZXhwb3N1cmVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbihmdW5jdGlvbiAoZW52VGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBzcGVjTGlnaHQgPSBuZXcgQW1iaWVudEN1YmVtYXBMaWdodCh7XHJcbiAgICAgICAgICAgIGludGVuc2l0eTogc3BlY0ludGVuc2l0eSAhPSBudWxsID8gc3BlY0ludGVuc2l0eSA6IDAuN1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwZWNMaWdodC5jdWJlbWFwID0gZW52VGV4dHVyZTtcclxuICAgICAgICBlbnZUZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAgICAgLy8gVE9ETyBDYWNoZSBwcmVmaWx0ZXIgP1xyXG4gICAgICAgIHNwZWNMaWdodC5wcmVmaWx0ZXIoc2VsZi5yZW5kZXJlciwgMzIpO1xyXG5cclxuICAgICAgICB2YXIgZGlmZkxpZ2h0ID0gbmV3IEFtYmllbnRTSExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBkaWZmSW50ZW5zaXR5ICE9IG51bGwgPyBkaWZmSW50ZW5zaXR5IDogMC43LFxyXG4gICAgICAgICAgICBjb2VmZmljaWVudHM6IHNoVXRpbC5wcm9qZWN0RW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlbmRlcmVyLCBzcGVjTGlnaHQuY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZDogMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NlbmUuYWRkKHNwZWNMaWdodCk7XHJcbiAgICAgICAgc2NlbmUuYWRkKGRpZmZMaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNwZWN1bGFyOiBzcGVjTGlnaHQsXHJcbiAgICAgICAgICAgIGRpZmZ1c2U6IGRpZmZMaWdodCxcclxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZUZXh0dXJlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIExvYWQgYSBbZ2xURl0oaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGKSBmb3JtYXQgbW9kZWwuXHJcbiAqIFlvdSBjYW4gY29udmVydCBGQlgvREFFL09CSiBmb3JtYXQgbW9kZWxzIHRvIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIHdpdGggW2ZieDJnbHRmXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5Z2wjZmJ4LXRvLWdsdGYyMC1jb252ZXJ0ZXIpIHB5dGhvbiBzY3JpcHQsXHJcbiAqIG9yIHNpbXBseSB1c2luZyB0aGUgW0NsYXkgVmlld2VyXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5LXZpZXdlcikgY2xpZW50IGFwcGxpY2F0aW9uLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfGNsYXkuU2hhZGVyfSBbb3B0cy5zaGFkZXI9J2NsYXkuc3RhbmRhcmQnXSAnYmFzaWMnfCdsYW1iZXJ0J3wnc3RhbmRhcmQnLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLndhaXRUZXh0dXJlTG9hZGVkPWZhbHNlXSBJZiBhZGQgdG8gc2NlbmUgdXRpbCB0ZXh0dXJlcyBhcmUgYWxsIGxvYWRlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5hdXRvUGxheUFuaW1hdGlvbj10cnVlXSBJZiBhdXRvcGxheSB0aGUgYW5pbWF0aW9uIG9mIG1vZGVsLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVwQXhpcz0neSddIENoYW5nZSBtb2RlbCB0byB5IHVwIGlmIHVwQXhpcyBpcyAneidcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlRmxpcFk9ZmFsc2VdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMudGV4dHVyZVJvb3RQYXRoXSBSb290IHBhdGggb2YgdGV4dHVyZS4gRGVmYXVsdCB0byBiZSByZWxhdGl2ZSB3aXRoIGdsVEYgZmlsZS5cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0aGF0IG1vZGVsIHdpbGwgYmUgbW91bnRlZC4gRGVmYXVsdCB0byBiZSBzY2VuZVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRNb2RlbCA9IGZ1bmN0aW9uICh1cmwsIG9wdHMsIHBhcmVudE5vZGUpIHtcclxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVUkwuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgb3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2hhZGVyID0gb3B0cy5zaGFkZXIgfHwgJ2NsYXkuc3RhbmRhcmQnO1xyXG5cclxuICAgIHZhciBsb2FkZXJPcHRzID0ge1xyXG4gICAgICAgIHJvb3ROb2RlOiBuZXcgTm9kZSgpLFxyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgIHRleHR1cmVSb290UGF0aDogb3B0cy50ZXh0dXJlUm9vdFBhdGgsXHJcbiAgICAgICAgY3Jvc3NPcmlnaW46ICdBbm9ueW1vdXMnLFxyXG4gICAgICAgIHRleHR1cmVGbGlwWTogb3B0cy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdHMudXBBeGlzICYmIG9wdHMudXBBeGlzLnRvTG93ZXJDYXNlKCkgPT09ICd6Jykge1xyXG4gICAgICAgIGxvYWRlck9wdHMucm9vdE5vZGUucm90YXRpb24uaWRlbnRpdHkoKS5yb3RhdGVYKC1NYXRoLlBJIC8gMik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxvYWRlciA9IG5ldyBHTFRGTG9hZGVyKGxvYWRlck9wdHMpO1xyXG5cclxuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5hZGQocmVzdWx0LnJvb3ROb2RlKTtcclxuICAgICAgICAgICAgaWYgKG9wdHMuYXV0b1BsYXlBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jbGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9hZGVyLnN1Y2Nlc3MoZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRzLndhaXRUZXh0dXJlTG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWQocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHJlc3VsdC50ZXh0dXJlcy5tYXAoZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmVycm9yKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIubG9hZCh1cmwpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuLy8gVE9ETyBjbG9uZU1vZGVsXHJcblxyXG4vKipcclxuICogU2ltaWxhciB0byBgYXBwLnNjZW5lLmNsb25lTm9kZWAsIGV4Y2VwdCBpdCB3aWxsIG1vdW50IHRoZSBjbG9uZWQgbm9kZSB0byB0aGUgc2NlbmUgYXV0b21hdGljYWxseS5cclxuICogU2VlIG1vcmUgaW4ge0BsaW5rIGNsYXkuU2NlbmUjY2xvbmVOb2RlfVxyXG4gKlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbmV3IGNsb25lZCBub2RlIHdpbGwgYmUgbW91bnRlZC5cclxuICogICAgICAgICAgRGVmYXVsdCB0byBoYXZlIHNhbWUgcGFyZW50IHdpdGggc291cmNlIG5vZGUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgbm9kZS5nZXRQYXJlbnQoKTtcclxuXHJcbiAgICB2YXIgbmV3Tm9kZSA9IHRoaXMuc2NlbmUuY2xvbmVOb2RlKG5vZGUsIHBhcmVudE5vZGUpO1xyXG4gICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICBwYXJlbnROb2RlLmFkZChuZXdOb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3Tm9kZTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBBcHAzRDogQXBwM0QsXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIDNEIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBtYW5hZ2UgdGhlIGFwcCBpbml0aWFsaXphdGlvbiBhbmQgbG9vcC5cclxuICAgICAqXHJcbiAgICAgKiBTZWUgbW9yZSBkZXRhaWxzIGF0IHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gICAgICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyNhcHAnLCB7XHJcbiAgICAgKiAgICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAqICAgICAgICAgIGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgKiAgICAgICAgICB2YXIgY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYSgpO1xyXG4gICAgICogICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAyKTtcclxuICAgICAqICAgICAgfSxcclxuICAgICAqICAgICAgbG9vcDogZnVuY3Rpb24gKCkgeyAvLyBub29wIH1cclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChkb20sIGFwcE5TKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBcHAzRChkb20sIGFwcE5TKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgbm90aWZpZXIgZnJvbSAnLi4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdXRpbCAgZnJvbSAnLi4vY29yZS91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza1xyXG4gKiBAbWl4ZXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG5mdW5jdGlvbiBUYXNrKCkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSBmYWxzZTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgc3VjY2Vzc2VkXHJcbiAqIEBwYXJhbSB7fSBkYXRhXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IHRydWU7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbn07XHJcbi8qKlxyXG4gKiBUYXNrIGZhaWxlZFxyXG4gKiBAcGFyYW0ge30gZXJyXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihlcnIpIHtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2Z1bGxmaWxsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCBlcnIpO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBzdWNjZXNzZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzRnVsbGZpbGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNSZWplY3RlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzU2V0dGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQgfHwgdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZnVuY3Rpb24gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICB2YXIgdGFzayA9IG5ldyBUYXNrKCk7XHJcbiAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogcmVzcG9uc2VUeXBlLFxyXG4gICAgICAgIG9ubG9hZDogZnVuY3Rpb24ocmVzKSB7XHJcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25lcnJvcjogZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgICAgICAgICAgdGFzay5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhc2s7XHJcbn1cclxuLyoqXHJcbiAqIE1ha2UgYSB2ZW5kb3IucmVxdWVzdCB0YXNrXHJcbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R8b2JqZWN0W118c3RyaW5nW119IHVybFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtyZXNwb25zZVR5cGVdXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKCcuL2EuanNvbicpO1xyXG4gKiAgICAgdmFyIHRhc2sgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayh7XHJcbiAqICAgICAgICAgdXJsOiAnYi5iaW4nLFxyXG4gKiAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbJy4vYS5qc29uJywgJy4vYi5qc29uJ10pO1xyXG4gKiAgICAgdmFyIHRhc2tzID0gVGFzay5tYWtlUmVxdWVzdFRhc2soW1xyXG4gKiAgICAgICAgIHt1cmw6ICdhLmpzb24nfSxcclxuICogICAgICAgICB7dXJsOiAnYi5iaW4nLCByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9XHJcbiAqICAgICBdKTtcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfGNsYXkuYXN5bmMuVGFza1tdfVxyXG4gKi9cclxuVGFzay5tYWtlUmVxdWVzdFRhc2sgPSBmdW5jdGlvbih1cmwsIHJlc3BvbnNlVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayh1cmwsIHJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1cmwudXJsKSB7ICAgLy8gIENvbmZpZ3VyZSBvYmplY3RcclxuICAgICAgICB2YXIgb2JqID0gdXJsO1xyXG4gICAgICAgIHJldHVybiBtYWtlUmVxdWVzdFRhc2sob2JqLnVybCwgb2JqLnJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHsgIC8vIFVybCBsaXN0XHJcbiAgICAgICAgdmFyIHVybExpc3QgPSB1cmw7XHJcbiAgICAgICAgdmFyIHRhc2tzID0gW107XHJcbiAgICAgICAgdXJsTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdXJsLCByZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKE9iamVjdChvYmopID09PSBvYmopIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IG9iai51cmw7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGUgPSBvYmoucmVzcG9uc2VUeXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhc2tzLnB1c2gobWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhc2tzO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfVxyXG4gKi9cclxuVGFzay5tYWtlVGFzayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIG5ldyBUYXNrKCk7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGFzaztcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IFRhc2sgZnJvbSAnLi9UYXNrJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza0dyb3VwXHJcbiAqIEBleHRlbmRzIGNsYXkuYXN5bmMuVGFza1xyXG4gKi9cclxudmFyIFRhc2tHcm91cCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBUYXNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgdGhpcy5fdGFza3MgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHRoaXMuX3JlamVjdGVkTnVtYmVyID0gMDtcclxufTtcclxuXHJcbnZhciBDdG9yID0gZnVuY3Rpb24gKCl7fTtcclxuQ3Rvci5wcm90b3R5cGUgPSBUYXNrLnByb3RvdHlwZTtcclxuVGFza0dyb3VwLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XHJcblxyXG5UYXNrR3JvdXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGFza0dyb3VwO1xyXG5cclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBzdWNjZXNzZWQsIHRhc2sgY2FuIGFsc28gYmUgYW55IG5vdGlmaWVyIG9iamVjdCB3aGljaCB3aWxsIHRyaWdnZXIgc3VjY2VzcyBhbmQgZXJyb3IgZXZlbnRzLiBMaWtlIHtAbGluayBjbGF5LlRleHR1cmUyRH0sIHtAbGluayBjbGF5LlRleHR1cmVDdWJlfSwge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9LlxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQGNoYWluYWJsZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLy8gTG9hZCB0ZXh0dXJlIGxpc3RcclxuICogICAgIHZhciBsaXN0ID0gWydhLmpwZycsICdiLmpwZycsICdjLmpwZyddXHJcbiAqICAgICB2YXIgdGV4dHVyZXMgPSBsaXN0Lm1hcChmdW5jdGlvbiAoc3JjKSB7XHJcbiAqICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgICAgICB0ZXh0dXJlLmxvYWQoc3JjKTtcclxuICogICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIHRhc2tHcm91cCA9IG5ldyBjbGF5LmFzeW5jLlRhc2tHcm91cCgpO1xyXG4gKiAgICAgdGFza0dyb3VwLmFsbCh0ZXh0dXJlcykuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gRG8gc29tZSB0aGluZyBhZnRlciBhbGwgdGV4dHVyZXMgbG9hZGVkXHJcbiAqICAgICB9KTtcclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAvLyBTb21lIHRhc2tzIGxpa2UgdGV4dHVyZSwgbG9hZGVyIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGFza1xyXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgc3RhdGVzIGhlcmVcclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIgKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5yZWplY3QodGFzayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHBhcmFtICB7QXJyYXkuPGNsYXkuYXN5bmMuVGFzaz59IHRhc2tzXHJcbiAqIEByZXR1cm4ge2NsYXkuYXN5bmMuVGFza0dyb3VwfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGxTZXR0bGVkID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLl90YXNrcyA9IHRhc2tzO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhc2suX3JlamVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX3JlamVjdGVkTnVtYmVyKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIEdldCBzdWNjZXNzZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0RnVsZmlsbGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuRnVsZmlsbGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rhc2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGhpcy5fdGFza3NbaV07XHJcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBuRnVsZmlsbGVkICs9IHRhc2suZ2V0RnVsZmlsbGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbkZ1bGZpbGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlcjtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZmFpbGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFJlamVjdGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuUmVqZWN0ZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5SZWplY3RlZCArPSB0YXNrLmdldFJlamVjdGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmaW5pc2hlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRTZXR0bGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG5cclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblNldHRsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IHRhc2suZ2V0U2V0dGxlZE51bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYodGFzay5fcmVqZWN0ZWQgfHwgdGFzay5fZnVsZmlsbGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuU2V0dGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlciArIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0VGFza051bWJlciA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblRhc2sgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5UYXNrICs9IHRhc2suZ2V0VGFza051bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblRhc2s7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrcy5sZW5ndGg7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrR3JvdXA7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBOb2RlIG9mIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZy5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKi9cclxudmFyIENvbXBvc2l0b3JOb2RlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgaW5wdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPdXRwdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgb3V0cHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8vIFRPRE8gUmVtb3ZlIHBhcmFtZXRlciBmdW5jdGlvbiBjYWxsYmFja1xyXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICB2YXIgcGFyYW1ldGVycyA9IG91dHB1dEluZm8ucGFyYW1ldGVycztcclxuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcclxuICAgICAgICBpZiAoIXBhcmFtZXRlcnNDb3B5KSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHkgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5W2tleV0gPSBwYXJhbWV0ZXJzW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHdpZHRoLCBoZWlnaHQ7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlci5nbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7fSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgZ2V0T3V0cHV0OiBmdW5jdGlvbiAocmVuZGVyZXIgLypvcHRpb25hbCovLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCB0ZXh0dXJlIHdpdGhvdXQgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgIG5hbWUgPSByZW5kZXJlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICBpZiAoIW91dHB1dEluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFscmVhZHkgYmVlbiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEZvcmNlIHJldHVybiB0ZXh0dXJlIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyAgIC8vIFNvbHZlIENpcmN1bGFyIFJlZmVyZW5jZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmxhbmsgdGV4dHVyZSBhdCBmaXJzdCBwYXNzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShvdXRwdXRJbmZvLnBhcmFtZXRlcnMgfHwge30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBsaW5rOiBmdW5jdGlvbiAoaW5wdXRQaW5OYW1lLCBmcm9tTm9kZSwgZnJvbVBpbk5hbWUpIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJlbGF0aW9uc2hpcCBmcm9tIG91dHB1dCBwaW4gdG8gaW5wdXQgcGluIGlzIG9uZS1vbi1tdWx0aXBsZVxyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rc1tpbnB1dFBpbk5hbWVdID0ge1xyXG4gICAgICAgICAgICBub2RlOiBmcm9tTm9kZSxcclxuICAgICAgICAgICAgcGluOiBmcm9tUGluTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0pIHtcclxuICAgICAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgbm9kZTogdGhpcyxcclxuICAgICAgICAgICAgcGluOiBpbnB1dFBpbk5hbWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gRW5hYmxlZCB0aGUgcGluIHRleHR1cmUgaW4gc2hhZGVyXHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoaW5wdXRQaW5OYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlucHV0TGlua3MgPSB7fTtcclxuICAgICAgICB0aGlzLm91dHB1dExpbmtzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3JlbmRlcmluZykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgbGluay5ub2RlLnVwZGF0ZVJlZmVyZW5jZShsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0gKys7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiZWZvcmVGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBQdXQgYmFjayBhbGwgdGhlIHRleHR1cmVzIHRvIHBvb2xcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0TGlua3MpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21wb3NpdG9yTm9kZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdyYXBoTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR3JhcGggPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGgjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9kZXM6IFtdXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaC5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0byB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgZGlydHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGROb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ub2Rlcy5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGV8c3RyaW5nfSBub2RlXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBub2RlID0gdGhpcy5nZXROb2RlQnlOYW1lKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Tm9kZUJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZXNbaV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbGlua3Mgb2YgZ3JhcGhcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uY2xlYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJhdmVyc2UgYWxsIHRoZSBub2RlcyBhbmQgYnVpbGQgdGhlIGdyYXBoXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5ub2Rlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0c1tpbnB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXNzICYmICFub2RlLnBhc3MubWF0ZXJpYWwuaXNVbmlmb3JtRW5hYmxlZChpbnB1dE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaW4gJyAgKyBub2RlLm5hbWUgKyAnLicgKyBpbnB1dE5hbWUgKyAnIG5vdCB1c2VkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGZyb21QaW5JbmZvID0gbm9kZS5pbnB1dHNbaW5wdXROYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbiA9IHRoaXMuZmluZFBpbihmcm9tUGluSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJvbVBpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGluayhpbnB1dE5hbWUsIGZyb21QaW4ubm9kZSwgZnJvbVBpbi5waW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmcm9tUGluSW5mbyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlICcgKyBmcm9tUGluSW5mbyArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiBvZiAnICsgZnJvbVBpbkluZm8ubm9kZSArICcuJyArIGZyb21QaW5JbmZvLnBpbiArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBmaW5kUGluOiBmdW5jdGlvbiAoaW5wdXQpIHtcclxuICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAvLyBUcnkgdG8gdGFrZSBpbnB1dCBhcyBhIGRpcmVjdGx5IGEgbm9kZVxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgR3JhcGhOb2RlKSB7XHJcbiAgICAgICAgICAgIGlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgbm9kZTogaW5wdXRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQubm9kZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0bXAubmFtZSA9PT0gaW5wdXQubm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0bXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBpbnB1dC5ub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRQaW4gPSBpbnB1dC5waW47XHJcbiAgICAgICAgICAgIGlmICghaW5wdXRQaW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBmaXJzdCBwaW4gZGVmYXVsdGx5XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQaW4gPSBPYmplY3Qua2V5cyhub2RlLm91dHB1dHMpWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHNbaW5wdXRQaW5dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiBpbnB1dFBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHcmFwaDtcclxuIiwiaW1wb3J0IEdyYXBoIGZyb20gJy4vR3JhcGgnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi9UZXh0dXJlUG9vbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQ29tcG9zaXRvciBwcm92aWRlIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZ1xyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvciA9IEdyYXBoLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gT3V0cHV0IG5vZGVcclxuICAgICAgICBfb3V0cHV0czogW10sXHJcblxyXG4gICAgICAgIF90ZXh0dXJlUG9vbDogbmV3IFRleHR1cmVQb29sKCksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3IucHJvdG90eXBlICovXHJcbntcclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICBHcmFwaC5wcm90b3R5cGUuYWRkTm9kZS5jYWxsKHRoaXMsIG5vZGUpO1xyXG4gICAgICAgIG5vZGUuX2NvbXBvc2l0b3IgPSB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubm9kZXNbaV0ub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh0aGlzLm5vZGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmZXJlbmNlIG51bWJlciBvZiBlYWNoIG91dHB1dCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uYmVmb3JlRnJhbWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3V0cHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRzW2ldLnVwZGF0ZVJlZmVyZW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0ucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gQ2xlYXIgdXBcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5hZnRlckZyYW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhbGxvY2F0ZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVsZWFzZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGcmFtZUJ1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbXBvc2l0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3I7XHJcbiIsImltcG9ydCBDb21wb3NpdG9yTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgU2NlbmVOb2RlID0gQ29tcG9zaXRvck5vZGUuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGUjICovXHJcbntcclxuICAgIG5hbWU6ICdzY2VuZScsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBhdXRvVXBkYXRlU2NlbmU6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBwcmVaOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbn0sIHtcclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJJbmZvO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG5cclxuICAgICAgICAgICAgcmVuZGVySW5mbyA9IHJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLmNhbWVyYSwgIXRoaXMuYXV0b1VwZGF0ZVNjZW5lLCB0aGlzLnByZVopO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLmZyYW1lQnVmZmVyO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLnVwZGF0ZVBhcmFtZXRlcihuYW1lLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fY29tcG9zaXRvci5hbGxvY2F0ZVRleHR1cmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBfZ2xbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gcGFyc2VJbnQoYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICYmIGF0dGFjaG1lbnQgPD0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICsgOCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXh0LmRyYXdCdWZmZXJzRVhUKGJ1ZnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBbHdheXMgY2xlYXJcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVCB8IGdsZW51bS5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCByZW5kZXJJbmZvKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lTm9kZTtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgVGV4dHVyZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGV4dHVyZTogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gVGV4dHVyZSBub2RlIG11c3QgaGF2ZSBvdXRwdXQgd2l0aG91dCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge31cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbn0sIHtcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciwgbmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERvIG5vdGhpbmdcclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZU5vZGU7XHJcbiIsIi8vIFRPRE8gU2hhZGVyIGxpYnJhcnlcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi9QYXNzJztcclxuaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLy8gVE9ETyBjdXJsbm9pc2UgZGVtbyB3cm9uZ1xyXG5cclxuLy8gUEVORElOR1xyXG4vLyBVc2UgdG9wb2xvZ2ljYWwgc29ydCA/XHJcblxyXG4vKipcclxuICogRmlsdGVyIG5vZGVcclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5GaWx0ZXJOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgdmFyIG5vZGUgPSBuZXcgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUoe1xyXG4gICAgICAgIG5hbWU6ICdmeGFhJyxcclxuICAgICAgICBzaGFkZXI6IGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmZ4YWEnKSxcclxuICAgICAgICBpbnB1dHM6IHtcclxuICAgICAgICAgICAgdGV4dHVyZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6ICdzY2VuZScsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiAnY29sb3InXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIE11bHRpcGxlIG91dHB1dHMgaXMgcHJlc2VydmVkIGZvciBNUlQgc3VwcG9ydCBpbiBXZWJHTDIuMFxyXG4gICAgICAgIG91dHB1dHM6IHtcclxuICAgICAgICAgICAgY29sb3I6IHtcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IGNsYXkuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDBcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGNsYXkuVGV4dHVyZS5SR0JBLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MTJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvLyBOb2RlIHdpbGwga2VlcCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIGtlZXBMYXN0RnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbm9kZSBvdXRwdXQgdGhlIFJUVCByZW5kZXJlZCBpbiBsYXN0IGZyYW1lXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRMYXN0RnJhbWU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKlxyXG4gICAgKi9cclxudmFyIEZpbHRlck5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0czoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0czogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkZXI6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuY29tcG9zaXRvci5QYXNzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhc3M6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHRoaXMuc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFzcyA9IHBhc3M7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRUZXh0dXJlID0gbGluay5ub2RlLmdldE91dHB1dChyZW5kZXJlciwgbGluay5waW4pO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShpbnB1dE5hbWUsIGlucHV0VGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE91dHB1dFxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5vdXRwdXRzID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJhbWV0ZXJzLndpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50IHx8IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoYXR0YWNobWVudCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgYXR0YWNobWVudCBjaGFuZ2VzIGluIGRpZmZlcmVudCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmF0dGFjaChcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLCBhdHRhY2htZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGRhdGEgb2YgdGV4dHVyZSBpcyBjaGFuZ2VkIG92ZXIgdGltZSxcclxuICAgICAgICAgICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICBsaW5rLm5vZGUucmVtb3ZlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMud2lkdGggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMuaGVpZ2h0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpZHRoID0gTWF0aC5jZWlsKHdpZHRoKTtcclxuICAgICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxyXG4gICAgICAgICAgICB8fCBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgIT09IGhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc0NvcHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKG5hbWUsIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJhbWV0ZXIgdmFsdWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICovXHJcbiAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFzcy5nZXRVbmlmb3JtKG5hbWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyczogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIG9ialtuYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIC8qKlxyXG4gICAgLy8gICogU2V0IHNoYWRlciBjb2RlXHJcbiAgICAvLyAgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAgICAvLyAgKi9cclxuICAgIC8vIHNldFNoYWRlcjogZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgLy8gICAgIHZhciBtYXRlcmlhbCA9IHRoaXMucGFzcy5tYXRlcmlhbDtcclxuICAgIC8vICAgICBtYXRlcmlhbC5zaGFkZXIuc2V0RnJhZ21lbnQoc2hhZGVyU3RyKTtcclxuICAgIC8vICAgICBtYXRlcmlhbC5hdHRhY2hTaGFkZXIobWF0ZXJpYWwuc2hhZGVyLCB0cnVlKTtcclxuICAgIC8vIH0sXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIHh4eCk7XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdmFsXVxyXG4gICAgICovXHJcbiAgICBkZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wsIHZhbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sLCB2YWwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIENvbXBvc2l0b3JOb2RlLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBEZWZhdWx0IGRpc2FibGUgYWxsIHRleHR1cmVcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZGlzYWJsZVRleHR1cmVzQWxsKCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb2xvcmFkanVzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBjbGFtcCh0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCAoY29sb3ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggY29sb3IgKiBwb3coMi4wLCBleHBvc3VyZSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggcG93KGNvbG9yLCB2ZWMzKGdhbW1hKSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KCBjb2xvciwgdyApO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0bmVzc1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuY29udHJhc3RcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9ICh0ZXgucmdiLXZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5leHBvc3VyZVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICogcG93KDIuMCwgZXhwb3N1cmUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYW1tYVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBnYW1tYSA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBwb3codGV4LnJnYiwgdmVjMyhnYW1tYSkpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5zYXR1cmF0aW9uXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoY29sb3IsIHcpO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFs5XTtcXG5nYXVzc2lhbktlcm5lbFswXSA9IDAuMDc7XFxuZ2F1c3NpYW5LZXJuZWxbMV0gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzJdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFszXSA9IDAuMTQ7XFxuZ2F1c3NpYW5LZXJuZWxbNF0gPSAwLjE2O1xcbmdhdXNzaWFuS2VybmVsWzVdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs2XSA9IDAuMTI7XFxuZ2F1c3NpYW5LZXJuZWxbN10gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzhdID0gMC4wNztcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzEzXFxuZmxvYXQgZ2F1c3NpYW5LZXJuZWxbMTNdO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wMjtcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjEzO1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjExO1xcbmdhdXNzaWFuS2VybmVsWzldID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFsxMF0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzExXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMTJdID0gMC4wMjtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1clxcbiNkZWZpbmUgU0hBREVSX05BTUUgZ2F1c3NpYW5fYmx1clxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7dmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDIuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG51bmlmb3JtIGZsb2F0IGJsdXJEaXIgOiAwLjA7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbiAodm9pZClcXG57XFxuIEBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmtlcm5lbC5nYXVzc2lhbl85XFxuIHZlYzIgb2ZmID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4gb2ZmICo9IHZlYzIoMS4wIC0gYmx1ckRpciwgYmx1ckRpcik7XFxuIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcbiBmbG9hdCB3ZWlnaHRBbGwgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7XFxuIGZsb2F0IHcgPSBnYXVzc2lhbktlcm5lbFtpXTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZmxvYXQoaSAtIDQpICogb2ZmKSk7XFxuIHN1bSArPSB0ZXhlbCAqIHc7XFxuIHdlaWdodEFsbCArPSB3O1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzdW0gLyBtYXgod2VpZ2h0QWxsLCAwLjAxKSk7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIubG9nX2x1bVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gbHVtaW5hbmNlID0gbG9nKGx1bWluYW5jZSArIDAuMDAxKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sdW1fYWRhcHRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBhZGFwdGVkTHVtO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGN1cnJlbnRMdW07XFxudW5pZm9ybSBmbG9hdCBmcmFtZVRpbWUgOiAwLjAyO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgZkFkYXB0ZWRMdW0gPSBkZWNvZGVIRFIodGV4dHVyZTJEKGFkYXB0ZWRMdW0sIHZlYzIoMC41LCAwLjUpKSkucjtcXG4gZmxvYXQgZkN1cnJlbnRMdW0gPSBleHAoZW5jb2RlSERSKHRleHR1cmUyRChjdXJyZW50THVtLCB2ZWMyKDAuNSwgMC41KSkpLnIpO1xcbiBmQWRhcHRlZEx1bSArPSAoZkN1cnJlbnRMdW0gLSBmQWRhcHRlZEx1bSkgKiAoMS4wIC0gcG93KDAuOTgsIDMwLjAgKiBmcmFtZVRpbWUpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhmQWRhcHRlZEx1bSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QodGV4LnJnYiwgdyk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHV0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsb29rdXA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiBmbG9hdCBibHVlQ29sb3IgPSB0ZXguYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXgucik7XFxuIHRleFBvczEueSA9IChxdWFkMS55ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXguZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjNCBuZXdDb2xvcjEgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MxKTtcXG4gdmVjNCBuZXdDb2xvcjIgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MyKTtcXG4gdmVjNCBuZXdDb2xvciA9IG1peChuZXdDb2xvcjEsIG5ld0NvbG9yMiwgZnJhY3QoYmx1ZUNvbG9yKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobmV3Q29sb3IucmdiLCB0ZXgudyk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci52aWduZXR0ZVxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGRhcmtuZXNzOiAxO1xcbnVuaWZvcm0gZmxvYXQgb2Zmc2V0OiAxO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiO1xcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMihvZmZzZXQpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNChtaXgodGV4ZWwucmdiLCB2ZWMzKDEuMCAtIGRhcmtuZXNzKSwgZG90KHV2LCB1dikpLCB0ZXhlbC5hKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5vdXRwdXRcXG4jZGVmaW5lIE9VVFBVVF9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4LnJnYjtcXG4jaWZkZWYgT1VUUFVUX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hID0gdGV4LmE7XFxuI2Vsc2VcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHRocmVzaG9sZCA6IDE7XFxudW5pZm9ybSBmbG9hdCBzY2FsZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemU6IFs1MTIsIDUxMl07XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuY29uc3QgdmVjMyBsdW1XZWlnaHQgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWM0IG1lZGlhbih2ZWM0IGEsIHZlYzQgYiwgdmVjNCBjKVxcbntcXG4gcmV0dXJuIGEgKyBiICsgYyAtIG1pbihtaW4oYSwgYiksIGMpIC0gbWF4KG1heChhLCBiKSwgYyk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIGQgPSAxLjAgLyB0ZXh0dXJlU2l6ZS54eXggKiB2ZWMzKDEuMCwgMS4wLCAwLjApO1xcbiB2ZWM0IHMxID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eikpO1xcbiB2ZWM0IHMyID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eikpO1xcbiB2ZWM0IHMzID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiB2ZWM0IHM0ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiB0ZXhlbCA9IG1lZGlhbihtZWRpYW4odGV4ZWwsIHMxLCBzMiksIHMzLCBzNCk7XFxuI2VuZGlmXFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IgLCBsdW1XZWlnaHQpO1xcbiB2ZWM0IGNvbG9yO1xcbiBpZiAobHVtID4gdGhyZXNob2xkICYmIHRleGVsLmEgPiAwLjApXFxuIHtcXG4gY29sb3IgPSB2ZWM0KHRleGVsLnJnYiAqIHNjYWxlLCB0ZXhlbC5hICogc2NhbGUpO1xcbiB9XFxuIGVsc2VcXG4ge1xcbiBjb2xvciA9IHZlYzQoMC4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG93bnNhbXBsZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuZmxvYXQgYnJpZ2h0bmVzcyh2ZWMzIGMpXFxue1xcbiByZXR1cm4gbWF4KG1heChjLnIsIGMuZyksIGMuYik7XFxufVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIHMxID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSkucmdiO1xcbiB2ZWMzIHMyID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSkucmdiO1xcbiB2ZWMzIHMzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkucmdiO1xcbiB2ZWMzIHM0ID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkucmdiO1xcbiBmbG9hdCBzMXcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMSkgKyAxLjApO1xcbiBmbG9hdCBzMncgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMikgKyAxLjApO1xcbiBmbG9hdCBzM3cgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMykgKyAxLjApO1xcbiBmbG9hdCBzNHcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzNCkgKyAxLjApO1xcbiBmbG9hdCBvbmVEaXZpZGVTdW0gPSAxLjAgLyAoczF3ICsgczJ3ICsgczN3ICsgczR3KTtcXG4gdmVjNCBjb2xvciA9IHZlYzQoXFxuIChzMSAqIHMxdyArIHMyICogczJ3ICsgczMgKiBzM3cgKyBzNCAqIHM0dykgKiBvbmVEaXZpZGVTdW0sXFxuIDEuMFxcbiApO1xcbiNlbHNlXFxuIHZlYzQgY29sb3IgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gY29sb3IgKj0gMC4yNTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGNvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnVwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIsIDUxMl07XFxudW5pZm9ybSBmbG9hdCBzYW1wbGVTY2FsZTogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5jbGFtcF9zYW1wbGVcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICkpICogNC4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDE2LjApO1xcbiNlbHNlXFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgKzEuMCwgKzEuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5O1xcbiB2ZWM0IHM7XFxuIHMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHMgLyA0LjApO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmNvbXBvc2l0ZVxcbiNkZWZpbmUgVE9ORU1BUFBJTkdcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbiNpZmRlZiBCTE9PTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYmxvb207XFxuI2VuZGlmXFxuI2lmZGVmIExFTlNGTEFSRV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2ZsYXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNkaXJ0O1xcbiNlbmRpZlxcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1bTtcXG4jZW5kaWZcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsdXQ7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZURhcmtuZXNzOiAxLjA7XFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZU9mZnNldDogMS4wO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgZXhwb3N1cmUgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBibG9vbUludGVuc2l0eSA6IDAuMjU7XFxudW5pZm9ybSBmbG9hdCBsZW5zZmxhcmVJbnRlbnNpdHkgOiAxO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52ZWMzIEFDRVNUb25lTWFwcGluZyh2ZWMzIGNvbG9yKVxcbntcXG4gY29uc3QgZmxvYXQgQSA9IDIuNTE7XFxuIGNvbnN0IGZsb2F0IEIgPSAwLjAzO1xcbiBjb25zdCBmbG9hdCBDID0gMi40MztcXG4gY29uc3QgZmxvYXQgRCA9IDAuNTk7XFxuIGNvbnN0IGZsb2F0IEUgPSAwLjE0O1xcbiByZXR1cm4gKGNvbG9yICogKEEgKiBjb2xvciArIEIpKSAvIChjb2xvciAqIChDICogY29sb3IgKyBEKSArIEUpO1xcbn1cXG5mbG9hdCBleWVBZGFwdGlvbihmbG9hdCBmTHVtKVxcbntcXG4gcmV0dXJuIG1peCgwLjIsIGZMdW0sIDAuNSk7XFxufVxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnZlYzMgbHV0VHJhbnNmb3JtKHZlYzMgY29sb3IpIHtcXG4gZmxvYXQgYmx1ZUNvbG9yID0gY29sb3IuYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWMyIHRleFBvczI7XFxuIHRleFBvczIueCA9IChxdWFkMi54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsdXQsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsdXQsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gcmV0dXJuIG5ld0NvbG9yLnJnYjtcXG59XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gdmVjNCgwLjApO1xcbiB2ZWM0IG9yaWdpbmFsVGV4ZWwgPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkVfRU5BQkxFRFxcbiB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBvcmlnaW5hbFRleGVsID0gdGV4ZWw7XFxuI2VuZGlmXFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG4gdmVjNCBibG9vbVRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpO1xcbiB0ZXhlbC5yZ2IgKz0gYmxvb21UZXhlbC5yZ2IgKiBibG9vbUludGVuc2l0eTtcXG4gdGV4ZWwuYSArPSBibG9vbVRleGVsLmEgKiBibG9vbUludGVuc2l0eTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG4gdGV4ZWwgKz0gZGVjb2RlSERSKHRleHR1cmUyRChsZW5zZmxhcmUsIHZfVGV4Y29vcmQpKSAqIHRleHR1cmUyRChsZW5zZGlydCwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHk7XFxuI2VuZGlmXFxuIHRleGVsLmEgPSBtaW4odGV4ZWwuYSwgMS4wKTtcXG4jaWZkZWYgTFVNX0VOQUJMRURcXG4gZmxvYXQgZkx1bSA9IHRleHR1cmUyRChsdW0sIHZlYzIoMC41LCAwLjUpKS5yO1xcbiBmbG9hdCBhZGFwdGVkTHVtRGVzdCA9IDMuMCAvIChtYXgoMC4xLCAxLjAgKyAxMC4wKmV5ZUFkYXB0aW9uKGZMdW0pKSk7XFxuIGZsb2F0IGV4cG9zdXJlQmlhcyA9IGFkYXB0ZWRMdW1EZXN0ICogZXhwb3N1cmU7XFxuI2Vsc2VcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gZXhwb3N1cmU7XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIHRleGVsLnJnYiAqPSBleHBvc3VyZUJpYXM7XFxuIHRleGVsLnJnYiA9IEFDRVNUb25lTWFwcGluZyh0ZXhlbC5yZ2IpO1xcbiNlbmRpZlxcbiB0ZXhlbCA9IGxpbmVhclRvc1JHQih0ZXhlbCk7XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxuIHRleGVsLnJnYiA9IGx1dFRyYW5zZm9ybShjbGFtcCh0ZXhlbC5yZ2IsdmVjMygwLjApLHZlYzMoMS4wKSkpO1xcbiNlbmRpZlxcbiNpZmRlZiBDT0xPUl9DT1JSRUNUSU9OXFxuIHRleGVsLnJnYiA9IGNsYW1wKHRleGVsLnJnYiArIHZlYzMoYnJpZ2h0bmVzcyksIDAuMCwgMS4wKTtcXG4gdGV4ZWwucmdiID0gY2xhbXAoKHRleGVsLnJnYiAtIHZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IsIHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSkpO1xcbiB0ZXhlbC5yZ2IgPSBtaXgodmVjMyhsdW0pLCB0ZXhlbC5yZ2IsIHNhdHVyYXRpb24pO1xcbiNlbmRpZlxcbiNpZmRlZiBWSUdORVRURVxcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMih2aWduZXR0ZU9mZnNldCk7XFxuIHRleGVsLnJnYiA9IG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gdmlnbmV0dGVEYXJrbmVzcyksIGRvdCh1diwgdXYpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHRleGVsKTtcXG4jaWZkZWYgREVCVUdcXG4gI2lmIERFQlVHID09IDFcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpKTtcXG4gI2VsaWYgREVCVUcgPT0gMlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpICogYmxvb21JbnRlbnNpdHkpO1xcbiAjZWxpZiBERUJVRyA9PSAzXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHkpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuIGlmIChvcmlnaW5hbFRleGVsLmEgPD0gMC4wMSAmJiBnbF9GcmFnQ29sb3IuYSA+IDFlLTUpIHtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBkb3QoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIH1cXG4jaWZkZWYgUFJFTVVMVElQTFlfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcXG4jZW5kaWZcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmxlbnNmbGFyZVxcbiNkZWZpbmUgU0FNUExFX05VTUJFUiA4XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zY29sb3I7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IGRpc3BlcnNhbCA6IDAuMztcXG51bmlmb3JtIGZsb2F0IGhhbG9XaWR0aCA6IDAuNDtcXG51bmlmb3JtIGZsb2F0IGRpc3RvcnRpb24gOiAxLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgdGV4dHVyZURpc3RvcnRlZChcXG4gaW4gdmVjMiB0ZXhjb29yZCxcXG4gaW4gdmVjMiBkaXJlY3Rpb24sXFxuIGluIHZlYzMgZGlzdG9ydGlvblxcbikge1xcbiByZXR1cm4gdmVjNChcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24ucikpLnIsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmcpKS5nLFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5iKSkuYixcXG4gMS4wXFxuICk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHRleGNvb3JkID0gLXZfVGV4Y29vcmQgKyB2ZWMyKDEuMCk7IHZlYzIgdGV4dHVyZU9mZnNldCA9IDEuMCAvIHRleHR1cmVTaXplO1xcbiB2ZWMyIGdob3N0VmVjID0gKHZlYzIoMC41KSAtIHRleGNvb3JkKSAqIGRpc3BlcnNhbDtcXG4gdmVjMiBoYWxvVmVjID0gbm9ybWFsaXplKGdob3N0VmVjKSAqIGhhbG9XaWR0aDtcXG4gdmVjMyBkaXN0b3J0aW9uID0gdmVjMygtdGV4dHVyZU9mZnNldC54ICogZGlzdG9ydGlvbiwgMC4wLCB0ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uKTtcXG4gdmVjNCByZXN1bHQgPSB2ZWM0KDAuMCk7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKVxcbiB7XFxuIHZlYzIgb2Zmc2V0ID0gZnJhY3QodGV4Y29vcmQgKyBnaG9zdFZlYyAqIGZsb2F0KGkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIG9mZnNldCkgLyBsZW5ndGgodmVjMigwLjUpKTtcXG4gd2VpZ2h0ID0gcG93KDEuMCAtIHdlaWdodCwgMTAuMCk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIH1cXG4gcmVzdWx0ICo9IHRleHR1cmUyRChsZW5zY29sb3IsIHZlYzIobGVuZ3RoKHZlYzIoMC41KSAtIHRleGNvb3JkKSkgLyBsZW5ndGgodmVjMigwLjUpKSk7XFxuIGZsb2F0IHdlaWdodCA9IGxlbmd0aCh2ZWMyKDAuNSkgLSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpO1xcbiByZXN1bHQgKz0gdGV4dHVyZURpc3RvcnRlZChvZmZzZXQsIG5vcm1hbGl6ZShnaG9zdFZlYyksIGRpc3RvcnRpb24pICogd2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IgPSByZXN1bHQ7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5ibGVuZFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYmxlbmRcXG4jaWZkZWYgVEVYVFVSRTFfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUxO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTJfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUyO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTNfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUzO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MyA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU0O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NCA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTVfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU1O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTZfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU2O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NiA6IDEuMDtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdmVjNCgwLjApO1xcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUxLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQxO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUyLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQyO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUzLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQzO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU0LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ0O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU1LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ1O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU2LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ2O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmZ4YWFcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbiNkZWZpbmUgRlhBQV9SRURVQ0VfTUlOICgxLjAvMTI4LjApXFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NVUwgKDEuMC84LjApXFxuI2RlZmluZSBGWEFBX1NQQU5fTUFYIDguMFxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiByZXNvbHV0aW9uID0gMS4wIC8gdmlld3BvcnQuenc7XFxuIHZlYzMgcmdiTlcgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JORSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDEuMCwgLTEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU1cgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYlNFID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWM0IHJnYmFNID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKSApO1xcbiB2ZWMzIHJnYk0gPSByZ2JhTS54eXo7XFxuIGZsb2F0IG9wYWNpdHkgPSByZ2JhTS53O1xcbiB2ZWMzIGx1bWEgPSB2ZWMzKCAwLjI5OSwgMC41ODcsIDAuMTE0ICk7XFxuIGZsb2F0IGx1bWFOVyA9IGRvdCggcmdiTlcsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU5FID0gZG90KCByZ2JORSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hU1cgPSBkb3QoIHJnYlNXLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTRSA9IGRvdCggcmdiU0UsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU0gPSBkb3QoIHJnYk0sIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU1pbiA9IG1pbiggbHVtYU0sIG1pbiggbWluKCBsdW1hTlcsIGx1bWFORSApLCBtaW4oIGx1bWFTVywgbHVtYVNFICkgKSApO1xcbiBmbG9hdCBsdW1hTWF4ID0gbWF4KCBsdW1hTSwgbWF4KCBtYXgoIGx1bWFOVywgbHVtYU5FKSAsIG1heCggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIHZlYzIgZGlyO1xcbiBkaXIueCA9IC0oKGx1bWFOVyArIGx1bWFORSkgLSAobHVtYVNXICsgbHVtYVNFKSk7XFxuIGRpci55ID0gKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcbiBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoICggbHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFICkgKiAoIDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwgKSwgRlhBQV9SRURVQ0VfTUlOICk7XFxuIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvICggbWluKCBhYnMoIGRpci54ICksIGFicyggZGlyLnkgKSApICsgZGlyUmVkdWNlICk7XFxuIGRpciA9IG1pbiggdmVjMiggRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuIG1heCggdmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiBkaXIgKiByY3BEaXJNaW4pKSAqIHJlc29sdXRpb247XFxuIHZlYzMgcmdiQSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAxLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICs9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAyLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICo9IDAuNTtcXG4gdmVjMyByZ2JCID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAtMC41ICkgKS54eXo7XFxuIHJnYkIgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAwLjUgKSApLnh5ejtcXG4gcmdiQiAqPSAwLjI1O1xcbiByZ2JCICs9IHJnYkEgKiAwLjU7XFxuIGZsb2F0IGx1bWFCID0gZG90KCByZ2JCLCBsdW1hICk7XFxuIGlmICggKCBsdW1hQiA8IGx1bWFNaW4gKSB8fCAoIGx1bWFCID4gbHVtYU1heCApIClcXG4ge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JBLCBvcGFjaXR5ICk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkIsIG9wYWNpdHkgKTtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBjb2xvcmFkanVzdEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzJztcclxuaW1wb3J0IGJsdXJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYmx1ci5nbHNsLmpzJztcclxuaW1wb3J0IGx1bUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdW0uZ2xzbC5qcyc7XHJcbmltcG9ydCBsdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvbHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgdmlnZW50dGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYnJpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzJztcclxuaW1wb3J0IGRvd25zYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZG93bnNhbXBsZS5nbHNsLmpzJztcclxuaW1wb3J0IHVwc2FtcGxlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgaGRyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzJztcclxuaW1wb3J0IGxlbnNmbGFyZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCBibGVuZEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibGVuZC5nbHNsLmpzJztcclxuaW1wb3J0IGZ4YWFFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzJztcclxuLy8gaW1wb3J0IGZ4YWEzRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Z4YWEzLmdsc2wuanMnO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihTaGFkZXIpIHtcclxuICAgIC8vIFNvbWUgYnVpbGQgaW4gc2hhZGVyc1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShjb2xvcmFkanVzdEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibHVyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1bUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odmlnZW50dGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10ob3V0cHV0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJyaWdodEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShkb3duc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKHVwc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGhkckVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsZW5zZmxhcmVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYmxlbmRFc3NsKTtcclxuXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGZ4YWFFc3NsKTtcclxuXHJcbn0iLCJpbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBDb21wb3NpdG9yIGZyb20gJy4vY29tcG9zaXRvci9Db21wb3NpdG9yJztcclxuaW1wb3J0IENvbXBvU2NlbmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9TY2VuZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9UZXh0dXJlTm9kZSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9GaWx0ZXJOb2RlIGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuXHJcbnJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IoU2hhZGVyKTtcclxuXHJcbnZhciBzaGFkZXJTb3VyY2VSZWcgPSAvXiNzb3VyY2VcXCgoLio/KVxcKS87XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jcmVhdGVDb21wb3NpdG9yXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yfVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRvcihqc29uLCBvcHRzKSB7XHJcbiAgICB2YXIgY29tcG9zaXRvciA9IG5ldyBDb21wb3NpdG9yKCk7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgbGliID0ge1xyXG4gICAgICAgIHRleHR1cmVzOiB7fSxcclxuICAgICAgICBwYXJhbWV0ZXJzOiB7fVxyXG4gICAgfTtcclxuICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbihzaGFkZXJMaWIsIHRleHR1cmVMaWIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24ubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVJbmZvID0ganNvbi5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVOb2RlKG5vZGVJbmZvLCBsaWIsIG9wdHMpO1xyXG4gICAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29tcG9zaXRvci5hZGROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKHZhciBuYW1lIGluIGpzb24ucGFyYW1ldGVycykge1xyXG4gICAgICAgIHZhciBwYXJhbUluZm8gPSBqc29uLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgbGliLnBhcmFtZXRlcnNbbmFtZV0gPSBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbyk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIGxvYWQgdGV4dHVyZSBhc3luY2hyb25vdXNcclxuICAgIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGZ1bmN0aW9uKHRleHR1cmVMaWIpIHtcclxuICAgICAgICBsaWIudGV4dHVyZXMgPSB0ZXh0dXJlTGliO1xyXG4gICAgICAgIGFmdGVyTG9hZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbXBvc2l0b3I7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cykge1xyXG4gICAgdmFyIHR5cGUgPSBub2RlSW5mby50eXBlIHx8ICdmaWx0ZXInO1xyXG4gICAgdmFyIHNoYWRlclNvdXJjZTtcclxuICAgIHZhciBpbnB1dHM7XHJcbiAgICB2YXIgb3V0cHV0cztcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ2ZpbHRlcicpIHtcclxuICAgICAgICB2YXIgc2hhZGVyRXhwID0gbm9kZUluZm8uc2hhZGVyLnRyaW0oKTtcclxuICAgICAgICB2YXIgcmVzID0gc2hhZGVyU291cmNlUmVnLmV4ZWMoc2hhZGVyRXhwKTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IFNoYWRlci5zb3VyY2UocmVzWzFdLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNoYWRlckV4cC5jaGFyQXQoMCkgPT09ICcjJykge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBsaWIuc2hhZGVyc1tzaGFkZXJFeHAuc3Vic3RyKDEpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzaGFkZXJTb3VyY2UpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gc2hhZGVyRXhwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChub2RlSW5mby5pbnB1dHMpIHtcclxuICAgICAgICBpbnB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGVJbmZvLmlucHV0c1tuYW1lXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IG5vZGVJbmZvLmlucHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlSW5mby5pbnB1dHNbbmFtZV0ubm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5waW5cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgIG91dHB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSBub2RlSW5mby5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICBvdXRwdXRzW25hbWVdID0ge307XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmF0dGFjaG1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5hdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5rZWVwTGFzdEZyYW1lID0gb3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLm91dHB1dExhc3RGcmFtZSA9IG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ucGFyYW1ldGVycyA9IGNvbnZlcnRQYXJhbWV0ZXIob3V0cHV0SW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBub2RlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdzY2VuZScpIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvU2NlbmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2NlbmU6IG9wdHMuc2NlbmUsXHJcbiAgICAgICAgICAgIGNhbWVyYTogb3B0cy5jYW1lcmEsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0dXJlJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9UZXh0dXJlTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIERlZmF1bHQgaXMgZmlsdGVyXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyU291cmNlLFxyXG4gICAgICAgICAgICBpbnB1dHM6IGlucHV0cyxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5wYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpYi50ZXh0dXJlc1t2YWwuc3Vic3RyKDEpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlcmVuZGVyJywgY3JlYXRlU2l6ZVNldEhhbmRsZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLm9uKCdiZWZvcmVyZW5kZXInLCB2YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZUluZm8uZGVmaW5lcyAmJiBub2RlLnBhc3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5kZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gbm9kZUluZm8uZGVmaW5lc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIG5vZGUucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgbmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBub2RlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0V2lkdGhGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiB3aWR0aDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SGVpZ2h0RnVuYyh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbykge1xyXG4gICAgdmFyIHBhcmFtID0ge307XHJcbiAgICBpZiAoIXBhcmFtSW5mbykge1xyXG4gICAgICAgIHJldHVybiBwYXJhbTtcclxuICAgIH1cclxuICAgIFsndHlwZScsICdtaW5GaWx0ZXInLCAnbWFnRmlsdGVyJywgJ3dyYXBTJywgJ3dyYXBUJywgJ2ZsaXBZJywgJ3VzZU1pcG1hcCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIGVudW1cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IFRleHR1cmVbdmFsXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgdmFyIHNpemVTY2FsZSA9IHBhcmFtSW5mby5zY2FsZSB8fCAxO1xyXG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtSW5mb1tuYW1lXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IGNyZWF0ZVNpemVQYXJzZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHRyeUNvbnZlcnRFeHByKHZhbCksIHNpemVTY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgaWYgKCFwYXJhbS53aWR0aCkge1xyXG4gICAgICAgIHBhcmFtLndpZHRoID0gZGVmYXVsdFdpZHRoRnVuYztcclxuICAgIH1cclxuICAgIGlmICghcGFyYW0uaGVpZ2h0KSB7XHJcbiAgICAgICAgcGFyYW0uaGVpZ2h0ID0gZGVmYXVsdEhlaWdodEZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtSW5mby51c2VNaXBtYXAgIT0gbnVsbCkge1xyXG4gICAgICAgIHBhcmFtLnVzZU1pcG1hcCA9IHBhcmFtSW5mby51c2VNaXBtYXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoIWpzb24udGV4dHVyZXMpIHtcclxuICAgICAgICBjYWxsYmFjayh7fSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHRleHR1cmVzID0ge307XHJcbiAgICB2YXIgbG9hZGluZyA9IDA7XHJcblxyXG4gICAgdmFyIGNiZCA9IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVSb290UGF0aCA9IG9wdHMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uKHRleHR1cmVJbmZvLCBuYW1lKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0ZXh0dXJlSW5mby5wYXRoO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcih0ZXh0dXJlSW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSAmJiBwYXRoLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5tYXAoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKGl0ZW0sIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCB0ZXh0dXJlUm9vdFBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZS5sb2FkKHBhdGgpO1xyXG4gICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICB0ZXh0dXJlLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICAgICAgICAgICAgICBjYmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAobG9hZGluZyA9PT0gMCAmJiAhY2JkKSB7XHJcbiAgICAgICAgY2FsbGJhY2sodGV4dHVyZXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplU2V0SGFuZGxlcihuYW1lLCBleHByRnVuYykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgdmlld3BvcnQgc2l6ZSBvciB3aW5kb3cgc2l6ZVxyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgLy8gUEVORElORyBJZiBtdWx0aXBseSBkcHIgP1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIHJlc3VsdCk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplUGFyc2VyKG5hbWUsIGV4cHJGdW5jLCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKSAqIHNjYWxlO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSByZW5kZXJlci5nZXRIZWlnaHQoKSAqIHNjYWxlO1xyXG4gICAgICAgIHJldHVybiBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJ5Q29udmVydEV4cHIoc3RyaW5nKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB2YXIgZXhwclJlcyA9IC9eZXhwclxcKCguKilcXCkkLy5leGVjKHN0cmluZyk7XHJcbiAgICBpZiAoZXhwclJlcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBmdW5jID0gbmV3IEZ1bmN0aW9uKCd3aWR0aCcsICdoZWlnaHQnLCAnZHByJywgJ3JldHVybiAnICsgZXhwclJlc1sxXSk7XHJcbiAgICAgICAgICAgIC8vIFRyeSBydW4gdFxyXG4gICAgICAgICAgICBmdW5jKDEsIDEpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHByZXNzaW9uLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciBmcm9tICcuLi9jcmVhdGVDb21wb3NpdG9yJztcclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjsiLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdDtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxudmFyeWluZyB2ZWMzIHZfVGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9CaXRhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFRISVJEX1BBU1NcXG51bmlmb3JtIG1hdDQgcHJldldvcmxkVmlld1Byb2plY3Rpb247XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcXG5tYXQ0IGdldFByZXZTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gZ2V0U2tpbk1hdHJpeChwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgcHJldlNraW5NYXRyaXhbSk9JTlRfQ09VTlRdO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBwcmV2U2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHByZXZTa2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4gYm9vbCBoYXNUYW5nZW50ID0gZG90KHRhbmdlbnQsIHRhbmdlbnQpID4gMC4wO1xcbiNlbmRpZlxcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2lmZGVmIEZJUlNUX1BBU1NcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiBpZiAoaGFzVGFuZ2VudCkge1xcbiBza2lubmVkVGFuZ2VudCA9IChza2luTWF0cml4V1MgKiB2ZWM0KHRhbmdlbnQueHl6LCAwLjApKS54eXo7XFxuIH1cXG4gI2VuZGlmXFxuICNpZmRlZiBUSElSRF9QQVNTXFxuIHtcXG4gbWF0NCBwcmV2U2tpbk1hdHJpeFdTID0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG4gaWYgKHdlaWdodC55ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnkpICogd2VpZ2h0Lnk7IH1cXG4gaWYgKHdlaWdodC56ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7IH1cXG4gZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG4gaWYgKHdlaWdodFcgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXOyB9XFxuIHByZXZTa2lubmVkUG9zaXRpb24gPSAocHJldlNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChTRUNPTkRfUEFTUykgfHwgZGVmaW5lZChGSVJTVF9QQVNTKVxcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiNlbmRpZlxcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZfTm9ybWFsID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkpLnh5eik7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiB9XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuI2lmZGVmIFRISVJEX1BBU1NcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfUHJldlZpZXdQb3NpdGlvbiA9IHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwcmV2U2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMS5mcmFnbWVudFxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzcztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG51bmlmb3JtIHNhbXBsZXIyRCByb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaG5lc3M7XFxudW5pZm9ybSBib29sIGRvdWJsZVNpZGVkO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGFscGhhOiAxLjA7XFxudW5pZm9ybSBpbnQgcm91Z2hHbG9zc0NoYW5uZWw6IDA7XFxuZmxvYXQgaW5kZXhpbmdUZXhlbChpbiB2ZWM0IHRleGVsLCBpbiBpbnQgaWR4KSB7XFxuIGlmIChpZHggPT0gMykgcmV0dXJuIHRleGVsLmE7XFxuIGVsc2UgaWYgKGlkeCA9PSAxKSByZXR1cm4gdGV4ZWwuZztcXG4gZWxzZSBpZiAoaWR4ID09IDIpIHJldHVybiB0ZXhlbC5iO1xcbiBlbHNlIHJldHVybiB0ZXhlbC5yO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuIGlmIChkb3VibGVTaWRlZCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gZXllUG9zIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQpLmEgKiBhbHBoYTtcXG4gaWYgKGEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHZfVGV4Y29vcmQpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSBub3JtYWxUZXhlbCAqIDIuMCAtIDEuMDtcXG4gbWF0MyB0Ym4gPSBtYXQzKHZfVGFuZ2VudCwgdl9CaXRhbmdlbnQsIHZfTm9ybWFsKTtcXG4gTiA9IG5vcm1hbGl6ZSh0Ym4gKiBOKTtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoTiArIDEuMCkgKiAwLjU7XFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiBpZiAodXNlUm91Z2hHbG9zc01hcCkge1xcbiBmbG9hdCBnMiA9IGluZGV4aW5nVGV4ZWwodGV4dHVyZTJEKHJvdWdoR2xvc3NNYXAsIHZfVGV4Y29vcmQpLCByb3VnaEdsb3NzQ2hhbm5lbCk7XFxuIGlmICh1c2VSb3VnaG5lc3MpIHtcXG4gZzIgPSAxLjAgLSBnMjtcXG4gfVxcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IuYSA9IGcgKyAwLjAwNTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMi5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcXG51bmlmb3JtIGJvb2wgdXNlTWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gYm9vbCBsaW5lYXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxudm9pZCBtYWluKClcXG57XFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuIGlmICh1c2VNZXRhbG5lc3NNYXApIHtcXG4gdmVjNCBtZXRhbG5lc3NUZXhlbCA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHZfVGV4Y29vcmQpO1xcbiBtID0gY2xhbXAobWV0YWxuZXNzVGV4ZWwuciArIChtICogMi4wIC0gMS4wKSwgMC4wLCAxLjApO1xcbiB9XFxuIHZlYzQgdGV4ZWwgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCk7XFxuIGlmIChsaW5lYXIpIHtcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4ZWwuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiICogY29sb3I7XFxuIGdsX0ZyYWdDb2xvci5hID0gbSArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIzLmZyYWdtZW50XFxudW5pZm9ybSBib29sIGZpcnN0UmVuZGVyO1xcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9QcmV2Vmlld1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIGEgPSB2X1ZpZXdQb3NpdGlvbi54eSAvIHZfVmlld1Bvc2l0aW9uLnc7XFxuIHZlYzIgYiA9IHZfUHJldlZpZXdQb3NpdGlvbi54eSAvIHZfUHJldlZpZXdQb3NpdGlvbi53O1xcbiBpZiAoZmlyc3RSZW5kZXIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGVsc2Uge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KChhIC0gYikgKiAwLjUgKyAwLjUsIDAuMCwgMS4wKTtcXG4gfVxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIuZGVidWdcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlNDtcXG51bmlmb3JtIGludCBkZWJ1ZzogMDtcXG52b2lkIG1haW4gKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gaWYgKGRlYnVnID09IDApIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChOLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDEpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKHopLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSAzKSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhnbG9zc2luZXNzKSwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSA0KSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhtZXRhbG5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDUpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChhbGJlZG8sIDEuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmU0LCB1dik7XFxuIGNvbG9yLnJnIC09IDAuNTtcXG4gY29sb3IucmcgKj0gMi4wO1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzIgd2luZG93U2l6ZTogV0lORE9XX1NJWkU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0OiBWSUVXUE9SVDtcXG51bmlmb3JtIG1hdDQgdmlld1Byb2plY3Rpb25JbnY7XFxuI2lmZGVmIERFUFRIX0VOQ09ERURcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjMiB1djIgPSAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuenc7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiB2ZWM0IHRleGVsMyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIGZsb2F0IGdsb3NzaW5lc3MgPSB0ZXhlbDEuYTtcXG4gZmxvYXQgbWV0YWxuZXNzID0gdGV4ZWwzLmE7XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIGZsb2F0IHogPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUyLCB1dikuciAqIDIuMCAtIDEuMDtcXG4gdmVjMiB4eSA9IHV2MiAqIDIuMCAtIDEuMDtcXG4gdmVjNCBwcm9qZWN0ZWRQb3MgPSB2ZWM0KHh5LCB6LCAxLjApO1xcbiB2ZWM0IHA0ID0gdmlld1Byb2plY3Rpb25JbnYgKiBwcm9qZWN0ZWRQb3M7XFxuIHZlYzMgcG9zaXRpb24gPSBwNC54eXogLyBwNC53O1xcbiB2ZWMzIGFsYmVkbyA9IHRleGVsMy5yZ2I7XFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gYWxiZWRvICogKDEuMCAtIG1ldGFsbmVzcyk7XFxuIHZlYzMgc3BlY3VsYXJDb2xvciA9IG1peCh2ZWMzKDAuMDQpLCBhbGJlZG8sIG1ldGFsbmVzcyk7XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbmZsb2F0IERfUGhvbmcoaW4gZmxvYXQgZywgaW4gZmxvYXQgbmRoKSB7XFxuIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgciA9IDEuMCAtIGc7XFxuIGZsb2F0IGEgPSByICogcjtcXG4gZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiByZXR1cm4gYSAvICgzLjE0MTU5MjYgKiB0bXAgKiB0bXApO1xcbn1cXG52ZWMzIEZfU2NobGljayhpbiBmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbnZlYzMgbGlnaHRFcXVhdGlvbihcXG4gaW4gdmVjMyBsaWdodENvbG9yLCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwgaW4gdmVjMyBzcGVjdWxhckNvbG9yLFxcbiBpbiBmbG9hdCBuZGwsIGluIGZsb2F0IG5kaCwgaW4gZmxvYXQgbmR2LCBpbiBmbG9hdCBnXFxuKVxcbntcXG4gcmV0dXJuIG5kbCAqIGxpZ2h0Q29sb3JcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG5pbXBvcnQgZ2J1ZmZlckVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9nYnVmZmVyLmdsc2wuanMnO1xyXG5pbXBvcnQgY2h1bmtFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KGdidWZmZXJFc3NsKTtcclxuU2hhZGVyLmltcG9ydChjaHVua0Vzc2wpO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmlsbENhbnZhcyhjb2xvcikge1xyXG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZmlsbFN0eWxlID0gY29sb3IgfHwgJyMwMDAnO1xyXG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8vIFRPRE8gc3BlY3VsYXJDb2xvclxyXG4vLyBUT0RPIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50XHJcbmZ1bmN0aW9uIGdldEdldFVuaWZvcm1Ib29rMShkZWZhdWx0Tm9ybWFsTWFwLCBkZWZhdWx0Um91Z2huZXNzTWFwLCBkZWZhdWx0RGlmZnVzZU1hcCkge1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIGlmIChzeW1ib2wgPT09ICdkb3VibGVTaWRlZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAndXZSZXBlYXQnIHx8IHN5bWJvbCA9PT0gJ3V2T2Zmc2V0JyB8fCBzeW1ib2wgPT09ICdhbHBoYScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ25vcm1hbE1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE5vcm1hbE1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnZGlmZnVzZU1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdERpZmZ1c2VNYXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcclxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFscGhhQ3V0b2ZmIHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdXNlUm91Z2huZXNzV29ya2Zsb3cgPSBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICB2YXIgcm91Z2hHbG9zc01hcCA9IHVzZVJvdWdobmVzc1dvcmtmbG93ID8gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3JvdWdobmVzc01hcCcpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3NNYXAnKTtcclxuICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2dsb3NzaW5lc3MnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvdyA/ICgxLjAgLSBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzJykpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3MnKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JvdWdoR2xvc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhcm91Z2hHbG9zc01hcDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3VzZVJvdWdobmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc0NoYW5uZWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0RGVmaW5lKCdmcmFnbWVudCcsICdST1VHSE5FU1NfQ0hBTk5FTCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ0dMT1NTSU5FU1NfQ0hBTk5FTCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2syKGRlZmF1bHREaWZmdXNlTWFwLCBkZWZhdWx0TWV0YWxuZXNzTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmFibGUsIGdCdWZmZXJNYXQsIHN5bWJvbCkge1xyXG4gICAgICAgIHZhciBzdGFuZGFyZE1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3V2UmVwZWF0JzpcclxuICAgICAgICAgICAgY2FzZSAndXZPZmZzZXQnOlxyXG4gICAgICAgICAgICBjYXNlICdhbHBoYSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzJykgfHwgMDtcclxuICAgICAgICAgICAgY2FzZSAnZGlmZnVzZU1hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHRNZXRhbG5lc3NNYXA7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VzZU1ldGFsbmVzc01hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzTWFwJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpbmVhcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ1NSR0JfREVDT0RFJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhQ3V0b2ZmJzpcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFDdXRvZmYgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgnYWxwaGFDdXRvZmYnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMC4wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR0J1ZmZlciBpcyBwcm92aWRlZCBmb3IgZGVmZXJyZWQgcmVuZGVyaW5nIGFuZCBTU0FPLCBTU1IgcGFzcy5cclxuICogSXQgd2lsbCBkbyB0aHJlZSBwYXNzZXMgcmVuZGVyaW5nIHRvIGZvdXIgdGFyZ2V0IHRleHR1cmVzLiBTZWVcclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUxfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTJ9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlM31cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmU0fVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuZGVmZXJyZWQuR0J1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdCdWZmZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGNvbW1vblRleHR1cmVPcHRzID0ge1xyXG4gICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMTogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAyLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUyOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDMuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTM6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgNC5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlNDogZmFsc2UsXHJcblxyXG4gICAgICAgIHJlbmRlclRyYW5zcGFyZW50OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJSZW5kZXJMaXN0OiBbXSxcclxuICAgICAgICAvLyAtIFI6IG5vcm1hbC54XHJcbiAgICAgICAgLy8gLSBHOiBub3JtYWwueVxyXG4gICAgICAgIC8vIC0gQjogbm9ybWFsLnpcclxuICAgICAgICAvLyAtIEE6IGdsb3NzaW5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDE6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FUXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBkZXB0aFxyXG4gICAgICAgIF9nQnVmZmVyVGV4MjogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gZm9ybWF0OiBUZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCxcclxuICAgICAgICAgICAgLy8gdHlwZTogVGV4dHVyZS5VTlNJR05FRF9JTlRcclxuXHJcbiAgICAgICAgICAgIGZvcm1hdDogVGV4dHVyZS5ERVBUSF9TVEVOQ0lMLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBhbGJlZG8uclxyXG4gICAgICAgIC8vIC0gRzogYWxiZWRvLmdcclxuICAgICAgICAvLyAtIEI6IGFsYmVkby5iXHJcbiAgICAgICAgLy8gLSBBOiBtZXRhbG5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDM6IG5ldyBUZXh0dXJlMkQoY29tbW9uVGV4dHVyZU9wdHMpLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclRleDQ6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIEZMT0FUIFRleHR1cmUgaGFzIGJ1ZyBvbiBpT1MuIGlzIEhBTEZfRkxPQVQgZW5vdWdoP1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICBfZGVmYXVsdE5vcm1hbE1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjMDAwJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdFJvdWdobmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdE1ldGFsbmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdERpZmZ1c2VNYXA6IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY3JlYXRlRmlsbENhbnZhcygnI2ZmZicpXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwxOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIEZJUlNUX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwyOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgU0VDT05EX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDM6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgVEhJUkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kZWJ1Z1Bhc3M6IG5ldyBQYXNzKHtcclxuICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1ZycpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqL3tcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBHIEJ1ZmZlciBzaXplLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAgICAgKi9cclxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPT09IHdpZHRoXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9PT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDQud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5LFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwciB8fCAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdmlld3BvcnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB4OiAwLCB5OiAwLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2dCdWZmZXJUZXgxLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBHQnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBmcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcblxyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBnQnVmZmVyUmVuZGVyTGlzdCA9IHRoaXMuX2dCdWZmZXJSZW5kZXJMaXN0O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BhcXVlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW9wYXF1ZUxpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gb3BhcXVlTGlzdFtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUcmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BhcmVudExpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0W29mZnNldCsrXSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdC5sZW5ndGggPSBvZmZzZXQ7XHJcblxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMTtcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTIgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUyO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMyA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTM7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmU0ID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlNDtcclxuICAgICAgICBpZiAoIWVuYWJsZVRhcmdldFRleHR1cmUxICYmICFlbmFibGVUYXJnZXRUZXh0dXJlMyAmJiAhZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGRpc2FibGUgdGFyZ2V0VGV4dHVyZTEsIHRhcmdldFRleHR1cmUzLCB0YXJnZXRUZXh0dXJlNCBib3RoJyk7XHJcbiAgICAgICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gob3B0cy50YXJnZXRUZXh0dXJlMiB8fCB0aGlzLl9nQnVmZmVyVGV4MiwgcmVuZGVyZXIuZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFyVmlld3BvcnQoKSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBpc01hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbCAhPT0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HLCBzY2VuZS5ib3VuZGluZ0JveExhc3RGcmFtZSBuZWVkcyBiZSB1cGRhdGVkIGlmIGhhdmUgc2hhZG93XHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKHNjZW5lKTtcclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTEpIHtcclxuICAgICAgICAgICAgLy8gUGFzcyAxXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUxIHx8IHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMSA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDE7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazEodGhpcy5fZGVmYXVsdE5vcm1hbE1hcCwgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcCwgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSBNUlQgaWYgcG9zc2libGVcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMykge1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzcyAyXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUzIHx8IHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMiA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDI7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazIodGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAsIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmU0IHx8IHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSBqaXR0ZXJpbmcgaW4gdGVtcG9yYWwgYWEuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcuIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGdCdWZmZXJNYXRlcmlhbDMgPSB0aGlzLl9nQnVmZmVyTWF0ZXJpYWwzO1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhVmlld1Byb2ogPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGNhbWVyYVZpZXdQcm9qLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSwgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gcmVuZGVyYWJsZS5za2VsZXRvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50cyA9IHJlbmRlcmFibGUuam9pbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA+IHJlbmRlcmVyLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZTa2luTWF0cmljZXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VNaXBtYXA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwWTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzW2ldID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUud2lkdGggPSBza2luTWF0cmljZXNUZXh0dXJlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUuaGVpZ2h0ID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMocmVuZGVyYWJsZS5fX3VpZF9fLCBqb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5IHx8IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkubGVuZ3RoICE9PSBza2luTWF0cmljZXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShza2luTWF0cmljZXNBcnJheS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5zZXQoc2tpbk1hdHJpY2VzQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiA9IHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiB8fCBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3b3JsZCB0cmFuc2Zvcm0gb2Ygc2tpbm5lZCBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LmNvcHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiwgY2FtZXJhVmlld1Byb2osIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdwcmV2U2tpbk1hdHJpeCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cmljZXNUZXh0dXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdmaXJzdFJlbmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKG51bGwpO1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgb3V0cHV0IG9mIGdCdWZmZXIuIFVzZSBgdHlwZWAgcGFyYW1ldGVyIHRvIGNob29zIHRoZSBkZWJ1ZyBvdXRwdXQgdHlwZSwgd2hpY2ggY2FuIGJlOlxyXG4gICAgICpcclxuICAgICAqICsgJ25vcm1hbCdcclxuICAgICAqICsgJ2RlcHRoJ1xyXG4gICAgICogKyAncG9zaXRpb24nXHJcbiAgICAgKiArICdnbG9zc2luZXNzJ1xyXG4gICAgICogKyAnbWV0YWxuZXNzJ1xyXG4gICAgICogKyAnYWxiZWRvJ1xyXG4gICAgICogKyAndmVsb2NpdHknXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9J25vcm1hbCddXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIGNhbWVyYSwgdHlwZSwgdmlld3BvcnQpIHtcclxuICAgICAgICB2YXIgZGVidWdUeXBlcyA9IHtcclxuICAgICAgICAgICAgbm9ybWFsOiAwLFxyXG4gICAgICAgICAgICBkZXB0aDogMSxcclxuICAgICAgICAgICAgcG9zaXRpb246IDIsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3M6IDMsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogNCxcclxuICAgICAgICAgICAgYWxiZWRvOiA1LFxyXG4gICAgICAgICAgICB2ZWxvY2l0eTogNlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRlYnVnVHlwZXNbdHlwZV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biB0eXBlIFwiJyArIHR5cGUgKyAnXCInKTtcclxuICAgICAgICAgICAgLy8gRGVmYXVsdCB1c2Ugbm9ybWFsXHJcbiAgICAgICAgICAgIHR5cGUgPSAnbm9ybWFsJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLmNsZWFyQml0ID0gcmVuZGVyZXIuZ2wuREVQVEhfQlVGRkVSX0JJVDtcclxuXHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIGRlYnVnUGFzcyA9IHRoaXMuX2RlYnVnUGFzcztcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgW3JlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpXSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlclRleDIpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyVGV4Myk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlNCcsIHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZGVidWcnLCBkZWJ1Z1R5cGVzW3R5cGVdKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogbm9ybWFsLnggKiAwLjUgKyAwLjVcclxuICAgICAqICsgRzogbm9ybWFsLnkgKiAwLjUgKyAwLjVcclxuICAgICAqICsgQjogbm9ybWFsLnogKiAwLjUgKyAwLjVcclxuICAgICAqICsgQTogZ2xvc3NpbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUxOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzZWNvbmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGRlcHRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoaXJkIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBhbGJlZG8uclxyXG4gICAgICogKyBHOiBhbGJlZG8uZ1xyXG4gICAgICogKyBCOiBhbGJlZG8uYlxyXG4gICAgICogKyBBOiBtZXRhbG5lc3NcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZm91cnRoIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiB2ZWxvY2l0eS5yXHJcbiAgICAgKiArIEc6IHZlbG9jaXR5LmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4NDtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHROb3JtYWxNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0TWV0YWxuZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHREaWZmdXNlTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdCdWZmZXI7IiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzIgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ29uZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC50b3BSYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmJvdHRvbVJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ29uZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZSMgKi8ge1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRvcFJhZGl1czogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjb25lIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG4gICAgICAgIHBvc2l0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRleGNvb3Jkcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGZhY2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gVG9wIGNhcFxyXG4gICAgICAgIHZhciBjYXBTZWdSYWRpYWwgPSBNYXRoLlBJICogMiAvIHRoaXMuY2FwU2VnbWVudHM7XHJcblxyXG4gICAgICAgIHZhciB0b3BDYXAgPSBbXTtcclxuICAgICAgICB2YXIgYm90dG9tQ2FwID0gW107XHJcblxyXG4gICAgICAgIHZhciByMSA9IHRoaXMudG9wUmFkaXVzO1xyXG4gICAgICAgIHZhciByMiA9IHRoaXMuYm90dG9tUmFkaXVzO1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICB2YXIgYzEgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgeSwgMCk7XHJcbiAgICAgICAgdmFyIGMyID0gdmVjMy5mcm9tVmFsdWVzKDAsIC15LCAwKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FwU2VnbWVudHM7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGhldGEgPSBpICogY2FwU2VnUmFkaWFsO1xyXG4gICAgICAgICAgICB2YXIgeCA9IHIxICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeiA9IHIxICogTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgICAgICB0b3BDYXAucHVzaCh2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeikpO1xyXG5cclxuICAgICAgICAgICAgeCA9IHIyICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB6ID0gcjIgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIGJvdHRvbUNhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCAteSwgeikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgdG9wIGNhcFxyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMxKTtcclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcygwLCAxKSk7XHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNhcFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHRvcENhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFswLCBpKzEsIChpKzEpICUgbiArIDFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGJvdHRvbSBjYXBcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChjMik7XHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaChib3R0b21DYXBbaV0pO1xyXG4gICAgICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcclxuICAgICAgICAgICAgZmFjZXMucHVzaChbb2Zmc2V0LCBvZmZzZXQrKChpKzEpICUgbiArIDEpLCBvZmZzZXQraSsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCBzaWRlXHJcbiAgICAgICAgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICB2YXIgbjIgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjIrMTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyBuMjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHZlYzMubGVycCh2ZWMzLmNyZWF0ZSgpLCB0b3BDYXBbaV0sIGJvdHRvbUNhcFtpXSwgdikpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCB2KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgajtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9ICgoaSArIDEpICUgbikgKiAobjIgKyAxKSArIGogKyAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTIsIG9mZnNldCtpMSwgb2Zmc2V0K2k0XSk7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTQsIG9mZnNldCtpMywgb2Zmc2V0K2kyXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkocG9zaXRpb25zKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciByID0gTWF0aC5tYXgodGhpcy50b3BSYWRpdXMsIHRoaXMuYm90dG9tUmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXIsIC10aGlzLmhlaWdodC8yLCAtcik7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHIsIHRoaXMuaGVpZ2h0LzIsIHIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lR2VvbWV0cnkgZnJvbSAnLi9Db25lJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DeWxpbmRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5yYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuY2FwU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKi9cclxudmFyIEN5bGluZGVyID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXBTZWdtZW50czogNTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMVxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuYnVpbGQoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN5bGluZGVyIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY29uZSA9IG5ldyBDb25lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICB0b3BSYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBib3R0b21SYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBjYXBTZWdtZW50czogdGhpcy5jYXBTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHRoaXMuaGVpZ2h0U2VnbWVudHMsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gY29uZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IGNvbmUuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IGNvbmUuYm91bmRpbmdCb3g7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3lsaW5kZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gdl9Qb3NpdGlvbiA9IHBvc2l0aW9uO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwb3RfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IHVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBwZW51bWJyYUFuZ2xlQ29zaW5lO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGZhbGxvZmZGYWN0b3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0U2hhZG93TWFwU2l6ZTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBmbG9hdCBjID0gZG90KC1ub3JtYWxpemUobGlnaHREaXJlY3Rpb24pLCBMKTtcXG4gZmxvYXQgZmFsbG9mZiA9IGNsYW1wKChjIC0gdW1icmFBbmdsZUNvc2luZSkgLyAocGVudW1icmFBbmdsZUNvc2luZSAtIHVtYnJhQW5nbGVDb3NpbmUpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoMS4wIC0gZmFsbG9mZikgKiBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGxpZ2h0U2hhZG93TWFwLCBsaWdodE1hdHJpeCwgcG9zaXRpb24sIGxpZ2h0U2hhZG93TWFwU2l6ZVxcbiApO1xcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHREaXJlY3Rpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4geiA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiB6IDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplLFxcbiB2ZWMyKDEuMCAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMS4wKSxcXG4gdmVjMihmbG9hdChfaWR4XykgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDAuMClcXG4gKTtcXG4gfVxcbiB9fVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gdmVjMyBhbGJlZG8gPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUzLCB1dikucmdiO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGFsYmVkbztcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9zaF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29lZmZpY2llbnRzWzldO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52ZWMzIGNhbGNBbWJpZW50U0hMaWdodCh2ZWMzIE4pIHtcXG4gcmV0dXJuIGxpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgbGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgbGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIE4gPSB0ZXhlbDEucmdiICogMi4wIC0gMS4wO1xcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvICogY2FsY0FtYmllbnRTSExpZ2h0KE4pO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRDdWJlbWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnbG9zc2luZXNzLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMgPSByb3VnaCAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0ID0gc3BlY3VsYXJDb2xvciAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuIHZlYzMgZW52VGV4ZWwgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlTG9kRVhUKGxpZ2h0Q3ViZW1hcCwgTCwgYmlhcyksIDguMTIpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGVudlRleGVsICogZW52V2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5wb2ludF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKFxcbiBsaWdodFNoYWRvd01hcCwgLUwgKiBkaXN0LCBsaWdodFJhbmdlXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gY2xhbXAoc2hhZG93Q29udHJpYiwgMC4wLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5zcGhlcmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFkaXVzO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gdmVjMyBSID0gcmVmbGVjdChWLCBOKTtcXG4gZmxvYXQgdG1wID0gZG90KEwsIFIpO1xcbiB2ZWMzIGNUb1IgPSB0bXAgKiBSIC0gTDtcXG4gZmxvYXQgZCA9IGxlbmd0aChjVG9SKTtcXG4gTCA9IEwgKyBjVG9SICogY2xhbXAobGlnaHRSYWRpdXMgLyBkLCAwLjAsIDEuMCk7XFxuIEwgPSBub3JtYWxpemUoTCk7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbjtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSBsaWdodFJhZGl1cyAvIDIuMCAvIGRpc3QsIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnR1YmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgbGlnaHRFeHRlbmQ7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiB2ZWMzIEwwID0gbGlnaHRQb3NpdGlvbiAtIGxpZ2h0RXh0ZW5kIC0gcG9zaXRpb247XFxuIHZlYzMgTDEgPSBsaWdodFBvc2l0aW9uICsgbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMRCA9IEwxIC0gTDA7XFxuIGZsb2F0IGxlbjAgPSBsZW5ndGgoTDApO1xcbiBmbG9hdCBsZW4xID0gbGVuZ3RoKEwxKTtcXG4gZmxvYXQgaXJyYSA9IDIuMCAqIGNsYW1wKGRvdChOLCBMMCkgLyAoMi4wICogbGVuMCkgKyBkb3QoTiwgTDEpIC8gKDIuMCAqIGxlbjEpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IExERG90UiA9IGRvdChSLCBMRCk7XFxuIGZsb2F0IHQgPSAoTEREb3RSICogZG90KFIsIEwwKSAtIGRvdChMMCwgTEQpKSAvIChkb3QoTEQsIExEKSAtIExERG90UiAqIExERG90Uik7XFxuIHQgPSBjbGFtcCh0LCAwLjAsIDEuMCk7XFxuIEwgPSBMMCArIHQgKiBMRDtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gMC4wIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGlycmEgKiBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpXFxuICogKGRpZmZ1c2VDb2xvciArIERfUGhvbmcoZ2xvc3NpbmVzcywgbmRoKSAqIEZfU2NobGljayhuZHYsIHNwZWN1bGFyQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gTGlnaHQtcHJlIHBhc3MgZGVmZXJyZWQgcmVuZGVyaW5nXHJcbi8vIGh0dHA6Ly93d3cucmVhbHRpbWVyZW5kZXJpbmcuY29tL2Jsb2cvZGVmZXJyZWQtbGlnaHRpbmctYXBwcm9hY2hlcy9cclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgRnVsbFF1YWRQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBDb25lR2VvIGZyb20gJy4uL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXJHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ3lsaW5kZXInO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0J1ZmZlciBmcm9tICcuL0dCdWZmZXInO1xyXG5cclxuaW1wb3J0IHByZXpHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvdXRpbC5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWdodHZvbHVtZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzJztcclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5pbXBvcnQgc3BvdEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcG90Lmdsc2wuanMnO1xyXG5pbXBvcnQgZGlyZWN0aW9uYWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50c2hHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudHNoLmdsc2wuanMnO1xyXG5pbXBvcnQgYW1iaWVudGN1YmVtYXBHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyc7XHJcbmltcG9ydCBwb2ludEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9wb2ludC5nbHNsLmpzJztcclxuaW1wb3J0IHNwaGVyZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCB0dWJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KHByZXpHbHNsKTtcclxuU2hhZGVyLmltcG9ydCh1dGlsR2xzbCk7XHJcblNoYWRlci5pbXBvcnQobGlnaHR2b2x1bWVHbHNsKTtcclxuXHJcbi8vIExpZ2h0IHNoYWRlcnNcclxuU2hhZGVyLmltcG9ydChzcG90R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoZGlyZWN0aW9uYWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudHNoR2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudGN1YmVtYXBHbHNsKTtcclxuU2hhZGVyLmltcG9ydChwb2ludEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHNwaGVyZUdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHR1YmVHbHNsKTtcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5cclxuLyoqXHJcbiAqIERlZmVycmVkIHJlbmRlcmVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5SZW5kZXJlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIERlZmVycmVkUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGZ1bGxRdWFkVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpO1xyXG4gICAgdmFyIGxpZ2h0Vm9sdW1lVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5saWdodF92b2x1bWUudmVydGV4Jyk7XHJcblxyXG4gICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIgPSBuZXcgU2hhZGVyKGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0JykpO1xyXG5cclxuICAgIHZhciBsaWdodEFjY3VtdWxhdGVCbGVuZEZ1bmMgPSBmdW5jdGlvbiAoZ2wpIHtcclxuICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKGdsLkZVTkNfQUREKTtcclxuICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5PTkUsIGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlTGlnaHRQYXNzTWF0ID0gZnVuY3Rpb24gKHNoYWRlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHNoYWRlcixcclxuICAgICAgICAgICAgYmxlbmQ6IGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNyZWF0ZVZvbHVtZVNoYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaGFkZXIobGlnaHRWb2x1bWVWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuJyArIG5hbWUpKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gUm90YXRlIGFuZCBwb3NpdGlvbmluZyB0byBmaXQgdGhlIHNwb3QgbGlnaHRcclxuICAgIC8vIFdoaWNoIHRoZSBjdXNwIG9mIGNvbmUgcG9pbnRpbmcgdG8gdGhlIHBvc2l0aXZlIHpcclxuICAgIC8vIGFuZCBwb3NpdGlvbmVkIG9uIHRoZSBvcmlnaW5cclxuICAgIHZhciBjb25lR2VvID0gbmV3IENvbmVHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIG1hdC5yb3RhdGVYKE1hdGguUEkgLyAyKVxyXG4gICAgICAgIC50cmFuc2xhdGUobmV3IFZlY3RvcjMoMCwgLTEsIDApKTtcclxuXHJcbiAgICBjb25lR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XHJcblxyXG4gICAgdmFyIGN5bGluZGVyR2VvID0gbmV3IEN5bGluZGVyR2VvKHtcclxuICAgICAgICBjYXBTZWdtZW50czogMTBcclxuICAgIH0pO1xyXG4gICAgLy8gQWxpZ24gd2l0aCB4IGF4aXNcclxuICAgIG1hdC5pZGVudGl0eSgpLnJvdGF0ZVooTWF0aC5QSSAvIDIpO1xyXG4gICAgY3lsaW5kZXJHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByb3ZpZGUgU2hhZG93TWFwUGFzcyBmb3Igc2hhZG93IHJlbmRlcmluZy5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhdXRvIHJlc2l6aW5nIGZyb20gZ2l2ZW4gZGVmdWFsdCByZW5kZXJlciBzaXplLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9SZXNpemU6IHRydWUsXHJcblxyXG4gICAgICAgIF9jcmVhdGVMaWdodFBhc3NNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdCxcclxuXHJcbiAgICAgICAgX2dCdWZmZXI6IG5ldyBHQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtRnJhbWVCdWZmZXI6IG5ldyBGcmFtZUJ1ZmZlcigpLFxyXG5cclxuICAgICAgICBfbGlnaHRBY2N1bVRleDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIERldmljZSBub3Qgc3VwcG9ydCBmbG9hdCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNUXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mdWxsUXVhZFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBibGVuZFdpdGhQcmV2aW91czogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICBfZGlyZWN0aW9uYWxMaWdodE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIpLFxyXG5cclxuICAgICAgICBfYW1iaWVudE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50U0hNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0JylcclxuICAgICAgICApKSxcclxuICAgICAgICBfYW1iaWVudEN1YmVtYXBNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG5cclxuICAgICAgICBfc3BvdExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3Nwb3RfbGlnaHQnKSxcclxuICAgICAgICBfcG9pbnRMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdwb2ludF9saWdodCcpLFxyXG5cclxuICAgICAgICBfc3BoZXJlTGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BoZXJlX2xpZ2h0JyksXHJcbiAgICAgICAgX3R1YmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCd0dWJlX2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9saWdodFNwaGVyZUdlbzogbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDEwLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdlbWVudHM6IDEwXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9saWdodENvbmVHZW86IGNvbmVHZW8sXHJcblxyXG4gICAgICAgIF9saWdodEN5bGluZGVyR2VvOiBjeWxpbmRlckdlbyxcclxuXHJcbiAgICAgICAgX291dHB1dFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLm91dHB1dCcpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5SZW5kZXJlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEbyByZW5kZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5yZW5kZXJUb1RhcmdldCA9IGZhbHNlXSBJZiBub3Qgb3VwdXQgYW5kIHJlbmRlciB0byB0aGUgdGFyZ2V0IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMubm90VXBkYXRlU2hhZG93ID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2hhZG93LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTY2VuZSA9IHRydWVdIElmIG5vdCB1cGRhdGUgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgb3B0cykge1xyXG5cclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgICAgICBvcHRzLnJlbmRlclRvVGFyZ2V0ID0gb3B0cy5yZW5kZXJUb1RhcmdldCB8fCBmYWxzZTtcclxuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNoYWRvdyA9IG9wdHMubm90VXBkYXRlU2hhZG93IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2NlbmUgPSBvcHRzLm5vdFVwZGF0ZVNjZW5lIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMubm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUudXBkYXRlTGlnaHRzKCk7XHJcbiAgICAgICAgLy8gUmVuZGVyIGxpc3Qgd2lsbCBiZSB1cGRhdGVkIGluIGdidWZmZXIuXHJcblxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgRm9yIHN0ZXJlbyByZW5kZXJpbmdcclxuICAgICAgICB2YXIgZHByID0gcmVuZGVyZXIuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9SZXNpemVcclxuICAgICAgICAgICAgJiYgKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGhcclxuICAgICAgICAgICAgfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci5nZXRXaWR0aCgpICogZHByLCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnVwZGF0ZShyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIC8vIEFjY3VtdWxhdGUgbGlnaHQgYnVmZmVyXHJcbiAgICAgICAgdGhpcy5fYWNjdW11bGF0ZUxpZ2h0QnVmZmVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCAhb3B0cy5ub3RVcGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMucmVuZGVyVG9UYXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGhpcy5fbGlnaHRBY2N1bVRleCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2dCdWZmZXIucmVuZGVyRGVidWcocmVuZGVyZXIsIGNhbWVyYSwgJ25vcm1hbCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuRnJhbWVCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmRlZmVycmVkLkdCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEdCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdGhpcy5fZ0J1ZmZlci5nZXRWaWV3cG9ydCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBnZXRGdWxsUXVhZExpZ2h0UGFzczogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAvLyB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCA/XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hY2N1bXVsYXRlTGlnaHRCdWZmZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1UZXggPSB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgICAgIHZhciBsaWdodEFjY3VtRnJhbWVCdWZmZXIgPSB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXI7XHJcblxyXG4gICAgICAgIHZhciBleWVQb3NpdGlvbiA9IGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB2b2x1bWUgbWVzaGVzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS5saWdodHNbaV0uaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVMaWdodFByb3h5KHNjZW5lLmxpZ2h0c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dNYXBQYXNzID0gdGhpcy5zaGFkb3dNYXBQYXNzO1xyXG4gICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIHVwZGF0ZVNoYWRvdykge1xyXG4gICAgICAgICAgICBnbC5jbGVhckNvbG9yKDEsIDEsIDEsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlTGlnaHRTaGFkb3cocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmF0dGFjaChsaWdodEFjY3VtVGV4KTtcclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSByZW5kZXJlci5jbGVhckNvbG9yO1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBsaWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHZhciBkcHIgPSB2aWV3cG9ydC5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIGdsLnNjaXNzb3Iodmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwciwgdmlld3BvcnQud2lkdGggKiBkcHIsIHZpZXdwb3J0LmhlaWdodCAqIGRwcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzdGFydGxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2hMaXN0ID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB1VHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlcztcclxuXHJcbiAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gbGlnaHQudm9sdW1lTWVzaCB8fCBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcblxyXG4gICAgICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gdm9sdW1lTWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIHdpbGwgYWZmZWN0IHRoZSBzY2VuZSBib3VuZGluZyBib3ggd2hlbiByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgIC8vIGlmIGNhc3RTaGFkb3cgaXMgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwucG9pbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnBvaW50TGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5wb2ludExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwb3RMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnNwb3RMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwb3RMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RGlyZWN0aW9uJywgdVRwbC5zcG90TGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgndW1icmFBbmdsZUNvc2luZScsIHVUcGwuc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdwZW51bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2ZhbGxvZmZGYWN0b3InLCB1VHBsLnNwb3RMaWdodEZhbGxvZmZGYWN0b3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BoZXJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC5zcGhlcmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFkaXVzJywgdVRwbC5zcGhlcmVMaWdodFJhZGl1cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5zcGhlcmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RVQkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC50dWJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC50dWJlTGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodEV4dGVuZCcsIHVUcGwudHViZUxpZ2h0RXh0ZW5kLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnR1YmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25MaWdodFR5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUzJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoTGlzdC5wdXNoKHZvbHVtZU1lc2gpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXNzID0gdGhpcy5fZnVsbFF1YWRQYXNzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIEZ1bGwgcXVhZCBsaWdodFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FNQklFTlRfU0hfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudFNITWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvZWZmaWNpZW50cycsIHVUcGwuYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHMudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9DVUJFTUFQX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRDdWJlbWFwTWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q3ViZW1hcCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXAudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdicmRmTG9va3VwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSBzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9kaXJlY3Rpb25hbExpZ2h0TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdTSEFET1dfQ0FTQ0FERScsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rb253IGxpZ2h0IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodW5rbm93bkxpZ2h0VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXNzTWF0ZXJpYWwgPSBwYXNzLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2V5ZVBvc2l0aW9uJywgZXllUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMigpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBsaWdodC5fX3NoYWRvd01hcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cmljZXMnLCBsaWdodC5fX2xpZ2h0TWF0cmljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNOZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2hhZG93Q2FzY2FkZUNsaXBzRmFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGFzcy5yZW5kZXJRdWFkKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyVm9sdW1lTWVzaExpc3QocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVybGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3ByZXBhcmVMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgd29ybGRWaWV3ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHQuY2FzdFNoYWRvdyB8fCBsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUuaXNGcnVzdHVtQ3VsbGVkKHZvbHVtZU1lc2gsIGNhbWVyYSwgd29ybGRWaWV3LmFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgdm9sdW1lTWVzaC5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbWF0ZXJpYWwpIHtcclxuICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJQb2ludExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIHNoYWRvd01hcHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodE1hdHJpeCcsIGxpZ2h0TWF0cmljZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRElSRUNUSU9OQUxfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBsaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgbGlnaHQsIGNhc2NhZGVDbGlwcywgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzRmFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBsaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHNOZWFyO1xyXG4gICAgICAgICAgICAgICAgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHNGYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX3NoYWRvd01hcCA9IHNoYWRvd01hcHNbMF07XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2xpZ2h0TWF0cmljZXMgPSBsaWdodE1hdHJpY2VzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBVcGRhdGUgbGlnaHQgdm9sdW1lIG1lc2hcclxuICAgIC8vIExpZ2h0IHZvbHVtZSBtZXNoIGlzIHJlbmRlcmVkIGluIGxpZ2h0IGFjY3VtdWxhdGUgcGFzcyBpbnN0ZWFkIG9mIGZ1bGwgcXVhZC5cclxuICAgIC8vIEl0IHdpbGwgcmVkdWNlIHBpeGVscyBzaWduaWZpY2FudGx5IHdoZW4gbG9jYWwgbGlnaHQgaXMgcmVsYXRpdmVseSBzbWFsbC5cclxuICAgIC8vIEFuZCB3ZSBjYW4gdXNlIGN1c3RvbSB2b2x1bWUgbWVzaCB0byBzaGFwZSB0aGUgbGlnaHQuXHJcbiAgICAvL1xyXG4gICAgLy8gU2VlIFwiRGVmZXJyZWQgU2hhZGluZyBPcHRpbWl6YXRpb25zXCIgaW4gR0RDMjAxMVxyXG4gICAgX3VwZGF0ZUxpZ2h0UHJveHk6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciB2b2x1bWVNZXNoO1xyXG4gICAgICAgIGlmIChsaWdodC52b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGxvY2FsIGxpZ2h0IChwb2ludCBhbmQgc3BvdCkgbmVlZHMgdm9sdW1lIG1lc2guXHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb25hbCBhbmQgYW1iaWVudCBsaWdodCByZW5kZXJzIGluIGZ1bGwgcXVhZFxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gbGlnaHQudHlwZSA9PT0gJ1NQSEVSRV9MSUdIVCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zcGhlcmVMaWdodFNoYWRlciA6IHRoaXMuX3BvaW50TGlnaHRTaGFkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggY3JlYXRlZCBhdXRvbWF0aWNhbGx5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaWdodC5fX3ZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdChzaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0U3BoZXJlR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBsaWdodCB2b2x1bWUgbWVzaCBpbnRlcnNlY3QgY2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgbWVzaCBpbnNpZGUgY2FuIHN0aWxsIGJlIHJlbmRlcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGxpZ2h0LnJhbmdlICsgKGxpZ2h0LnJhZGl1cyB8fCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChyLCByLCByKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0Ll9fdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaCB8fCBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQodGhpcy5fc3BvdExpZ2h0U2hhZGVyKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0Q29uZUdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhc3BlY3QgPSBNYXRoLnRhbihsaWdodC5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQoYXNwZWN0ICogcmFuZ2UsIGFzcGVjdCAqIHJhbmdlLCByYW5nZSAvIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl90dWJlTGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDeWxpbmRlckdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KGxpZ2h0Lmxlbmd0aCAvIDIgKyByYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAvLyBBcHBseSBsaWdodCB0cmFuc2Zvcm1cclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtLCBsaWdodC53b3JsZFRyYW5zZm9ybSwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSB0aGlzLnNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbFtoYXNTaGFkb3cgPyAnZGVmaW5lJyA6ICd1bmRlZmluZSddKCdmcmFnbWVudCcsICdTSEFET1dNQVBfRU5BQkxFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclZvbHVtZU1lc2hMaXN0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBwcmVaTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBmdW5jdGlvbiBnZXRQcmVaTWF0ZXJpYWwoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVaTWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFUVVBTCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZvbHVtZU1lc2hMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IHZvbHVtZU1lc2hMaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh3b3JsZFZpZXcsIGNhbWVyYS52aWV3TWF0cml4LCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXNlIHByZXogdG8gYXZvaWQgb25lIHBpeGVsIHJlbmRlcmVkIHR3aWNlXHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2xlYXIgREVQVEhfQlVGRkVSXHJcbiAgICAgICAgICAgICAgICBnbC5jbGVhcihnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGdldFByZVpNYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVuZGVyIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbC5kZXB0aE1hc2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdm9sdW1lTWVzaF0sIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVNTKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodENvbmVHZW8uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRDeWxpbmRlckdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodFNwaGVyZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnVsbFF1YWRQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX291dHB1dFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEZWZlcnJlZFJlbmRlcmVyO1xyXG4iLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MiBNYXRyaXhcclxuICogQG5hbWUgbWF0MlxyXG4gKi9cclxuXHJcbnZhciBtYXQyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xyXG5tYXQyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MiB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGExID0gYVsxXTtcclxuICAgICAgICBvdXRbMV0gPSBhWzJdO1xyXG4gICAgICAgIG91dFsyXSA9IGExO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYVsxXTtcclxuICAgICAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYTAgKiBhMyAtIGEyICogYTE7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAgYTMgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAtYTEgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAtYTIgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAgYTAgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gQ2FjaGluZyB0aGlzIHZhbHVlIGlzIG5lc3NlY2FyeSBpZiBvdXQgPT0gYVxyXG4gICAgdmFyIGEwID0gYVswXTtcclxuICAgIG91dFswXSA9ICBhWzNdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIG91dFszXSA9ICBhMDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0Mi5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM107XHJcbiAgICB2YXIgYjAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0Mi5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyLm11bCA9IG1hdDIubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDIgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MiBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKiovXHJcbm1hdDIuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDIuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpKSlcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEwsIEQgYW5kIFUgbWF0cmljZXMgKExvd2VyIHRyaWFuZ3VsYXIsIERpYWdvbmFsIGFuZCBVcHBlciB0cmlhbmd1bGFyKSBieSBmYWN0b3JpemluZyB0aGUgaW5wdXQgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBEIHRoZSBkaWFnb25hbCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBVIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcclxuICovXHJcblxyXG5tYXQyLkxEVSA9IGZ1bmN0aW9uIChMLCBELCBVLCBhKSB7XHJcbiAgICBMWzJdID0gYVsyXS9hWzBdO1xyXG4gICAgVVswXSA9IGFbMF07XHJcbiAgICBVWzFdID0gYVsxXTtcclxuICAgIFVbM10gPSBhWzNdIC0gTFsyXSAqIFVbMV07XHJcbiAgICByZXR1cm4gW0wsIEQsIFVdO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDI7IiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MyBNYXRyaXhcclxuICogQG5hbWUgbWF0MmRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgbWF0MmQgY29udGFpbnMgc2l4IGVsZW1lbnRzIGRlZmluZWQgYXM6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5XVxyXG4gKiA8L3ByZT5cclxuICogVGhpcyBpcyBhIHNob3J0IGZvcm0gZm9yIHRoZSAzeDMgbWF0cml4OlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYywgdHgsXHJcbiAqICBiLCBkLCB0eSxcclxuICogIDAsIDAsIDFdXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGUgbGFzdCByb3cgaXMgaWdub3JlZCBzbyB0aGUgYXJyYXkgaXMgc2hvcnRlciBhbmQgb3BlcmF0aW9ucyBhcmUgZmFzdGVyLlxyXG4gKi9cclxuXHJcbnZhciBtYXQyZCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MmRcclxuICpcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xyXG5tYXQyZC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg2KTtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyZCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNsb25lID0gZnVuY3Rpb24oYSkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MmQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhYSA9IGFbMF0sIGFiID0gYVsxXSwgYWMgPSBhWzJdLCBhZCA9IGFbM10sXHJcbiAgICAgICAgYXR4ID0gYVs0XSwgYXR5ID0gYVs1XTtcclxuXHJcbiAgICB2YXIgZGV0ID0gYWEgKiBhZCAtIGFiICogYWM7XHJcbiAgICBpZighZGV0KXtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSBhZCAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hYiAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hYyAqIGRldDtcclxuICAgIG91dFszXSA9IGFhICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGFiICogYXR4IC0gYWEgKiBhdHkpICogZGV0O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0MmQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM10sIGI0ID0gYls0XSwgYjUgPSBiWzVdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xyXG4gICAgb3V0WzVdID0gYTEgKiBiNCArIGEzICogYjUgKyBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyZC5tdWwgPSBtYXQyZC5tdWx0aXBseTtcclxuXHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDJkIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICBvdXRbNF0gPSBhNDtcclxuICAgIG91dFs1XSA9IGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHYwID0gdlswXSwgdjEgPSB2WzFdO1xyXG4gICAgb3V0WzBdID0gYTAgKiB2MDtcclxuICAgIG91dFsxXSA9IGExICogdjA7XHJcbiAgICBvdXRbMl0gPSBhMiAqIHYxO1xyXG4gICAgb3V0WzNdID0gYTMgKiB2MTtcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byB0cmFuc2xhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXHJcbm1hdDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMDtcclxuICAgIG91dFsxXSA9IGExO1xyXG4gICAgb3V0WzJdID0gYTI7XHJcbiAgICBvdXRbM10gPSBhMztcclxuICAgIG91dFs0XSA9IGEwICogdjAgKyBhMiAqIHYxICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0MmQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIDEpKVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDJkOyIsIi8qKlxyXG4gKiBAZmlsZW92ZXJ2aWV3IGdsLW1hdHJpeCAtIEhpZ2ggcGVyZm9ybWFuY2UgbWF0cml4IGFuZCB2ZWN0b3Igb3BlcmF0aW9uc1xyXG4gKiBAYXV0aG9yIEJyYW5kb24gSm9uZXNcclxuICogQGF1dGhvciBDb2xpbiBNYWNLZW56aWUgSVZcclxuICogQHZlcnNpb24gMi4yLjJcclxuICovXHJcblxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgdmVjMiBmcm9tICcuL3ZlYzInO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuL3ZlYzQnO1xyXG5pbXBvcnQgbWF0MiBmcm9tICcuL21hdDInO1xyXG5pbXBvcnQgbWF0MmQgZnJvbSAnLi9tYXQyZCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4vcXVhdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICB2ZWMyOiB2ZWMyLFxyXG4gICAgdmVjMzogdmVjMyxcclxuICAgIHZlYzQ6IHZlYzQsXHJcbiAgICBtYXQyOiBtYXQyLFxyXG4gICAgbWF0MmQ6IG1hdDJkLFxyXG4gICAgbWF0MzogbWF0MyxcclxuICAgIG1hdDQ6IG1hdDQsXHJcbiAgICBxdWF0OiBxdWF0XHJcbn07XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IGdsbWF0cml4IGZyb20gJy4uL2dsbWF0cml4JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdsbWF0cml4O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBTcGhlcmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlNwaGVyZSMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFkaXVzOiA1XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BIRVJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BoZXJlTGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFkaXVzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhZGl1cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuVHViZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBUdWJlTGlnaHQgPSBMaWdodC5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5saWdodC5UdWJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IDEwXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnVFVCRV9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHR1YmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodEV4dGVuZDoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIGluIHggYXhpc1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgpLnNjYWxlKGluc3RhbmNlLmxlbmd0aCAvIDIpLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSkoKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFR1YmVMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5GWFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZYTG9hZGVyID0gQmFzZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHNoYWRlclJvb3RQYXRoOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuRlgucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB1cmxcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24ocGVyY2VudCwgbG9hZGVkLCB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdwcm9ncmVzcycsIHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3NpdG9yKEpTT04ucGFyc2UoZGF0YSksIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUm9vdFBhdGg6IHRoaXMudGV4dHVyZVJvb3RQYXRoIHx8IHRoaXMucm9vdFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhOiB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZTogdGhpcy5zY2VuZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGWExvYWRlcjtcclxuIiwiaW1wb3J0IG1hdDIgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Mic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDJcclxuICovXHJcbnZhciBNYXRyaXgyID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDIuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4Mi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQyLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQyLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge01hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0Mi5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsdGlwbHkgPSBNYXRyaXgyLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0Mi5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcclxuIiwiaW1wb3J0IG1hdDJkIGZyb20gJy4uL2dsbWF0cml4L21hdDJkJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MmRcclxuICovXHJcbnZhciBNYXRyaXgyZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJkXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDJkI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0MmQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDJkLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MmQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDJkKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDJkLmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsdGlwbHkodGhpcy5hcnJheSwgYi5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDJkLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgbWF0MmQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDJkLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyZC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyZC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0MmQubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bHRpcGx5ID0gTWF0cml4MmQubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyZC5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0MmQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyZDtcclxuIiwiaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDNcclxuICovXHJcbnZhciBNYXRyaXgzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXgzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MygpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBNYXRyaXgyZCBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQyZDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLmZyb21NYXQyZCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgb2YgTWF0cml4NFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIG1hdDMuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIG1hdDMucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgc2VsZiBieSB2XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gYVxyXG4gICAgICovXHJcbiAgICBub3JtYWxGcm9tTWF0NDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc3Bvc2Ugc2VsZiwgaW4tcGxhY2UuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuYWRqb2ludCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuTWF0cml4My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgbWF0My5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQzLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubXVsdGlwbHkgPSBNYXRyaXgzLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmZyb21NYXQyZCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDJkKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbVF1YXQgPSBmdW5jdGlvbiAob3V0LCBxKSB7XHJcbiAgICBtYXQzLmZyb21RdWF0KG91dC5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubm9ybWFsRnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0My5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5zY2FsZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc3Bvc2UgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQzLnRyYW5zbGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBSYW5kb20gb3IgY29uc3RhbnQgMWQsIDJkLCAzZCB2ZWN0b3IgZ2VuZXJhdG9yXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WYWx1ZVxyXG4gKi9cclxudmFyIFZhbHVlID0gZnVuY3Rpb24oKSB7fTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gW291dF1cclxuICogQHJldHVybiB7bnVtYmVyfGNsYXkuVmVjdG9yMnxjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7fTtcclxuXHJcbi8vIENvbnN0YW50XHJcbnZhciBDb25zdGFudFZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9O1xyXG59O1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0YW50VmFsdWU7XHJcblxyXG4vLyBWZWN0b3JcclxudmFyIFZlY3RvclZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB2YWwuY29uc3RydWN0b3I7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBDb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXQuY29weSh2YWwpO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuVmVjdG9yVmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVjdG9yVmFsdWU7XHJcbi8vUmFuZG9tIDFEXHJcbnZhciBSYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2UgPSBtYXggLSBtaW47XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2UgKyBtaW47XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20xRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMUQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMUQ7XHJcblxyXG4vLyBSYW5kb20yRFxyXG52YXIgUmFuZG9tMkQgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjIuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tMkQucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTJELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTJEO1xyXG5cclxudmFyIFJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZVggPSBtYXgueCAtIG1pbi54O1xyXG4gICAgdmFyIHJhbmdlWSA9IG1heC55IC0gbWluLnk7XHJcbiAgICB2YXIgcmFuZ2VaID0gbWF4LnogLSBtaW4uejtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjMuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV0sXHJcbiAgICAgICAgICAgIHJhbmdlWiAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMl1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tM0QucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTNELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTNEO1xyXG5cclxuLy8gRmFjdG9yeSBtZXRob2RzXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gY29uc3RhbnRcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLmNvbnN0YW50ID0gZnVuY3Rpb24oY29uc3RhbnQpIHtcclxuICAgIHJldHVybiBuZXcgQ29uc3RhbnRWYWx1ZShjb25zdGFudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gdmVjdG9yXHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS52ZWN0b3IgPSBmdW5jdGlvbih2ZWN0b3IpIHtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yVmFsdWUodmVjdG9yKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWluXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTFEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTJEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20zRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTNEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZhbHVlO1xyXG4iLCJpbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yNFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFZlY3RvcjQgPSBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yNCwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWM0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yNC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3I0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbihhLCBiLCB0KSB7XHJcbiAgICAgICAgdmVjNC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaW5pbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtaW46IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHJhbmRvbSB4LCB5LCB6LCB3IGNvbXBvbmVudHMgd2l0aCBhIGdpdmVuIHNjYWxlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHJhbmRvbTogZnVuY3Rpb24oc2NhbGUpIHtcclxuICAgICAgICB2ZWM0LnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBiIGFuZCBhZGQgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZUFuZEFkZDogZnVuY3Rpb24oYiwgcykge1xyXG4gICAgICAgIHZlYzQuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWREaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5zdWIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN1YnRyYWN0IGIgZnJvbSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIFF1YXRlcm5pb24gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybVF1YXQ6IGZ1bmN0aW9uKHEpIHtcclxuICAgICAgICB2ZWM0LnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yNC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0LmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XHJcbiAgICB2ZWM0LnNldChvdXQuYXJyYXksIHgsIHksIHosIHcpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuY29weSA9IGZ1bmN0aW9uKG91dCwgYikge1xyXG4gICAgdmVjNC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3RhbmNlID0gVmVjdG9yNC5kaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXYgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuZGl2aWRlKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXZpZGUgPSBWZWN0b3I0LmRpdjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZG90ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmxlbiA9IGZ1bmN0aW9uKGIpIHtcclxuICAgIHJldHVybiB2ZWM0Lmxlbmd0aChiLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFZlY3RvcjQubGVuZ3RoID0gVmVjdG9yNC5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubGVycCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgdCkge1xyXG4gICAgdmVjNC5sZXJwKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bHRpcGx5ID0gVmVjdG9yNC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjNC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnJhbmRvbSA9IGZ1bmN0aW9uKG91dCwgc2NhbGUpIHtcclxuICAgIHZlYzQucmFuZG9tKG91dC5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjNC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJEaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuc3FyRGlzdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjQuc3FyRGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjQuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc3VidHJhY3QgPSBWZWN0b3I0LnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzQudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yNDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlXHJcbiAqL1xyXG52YXIgUGFydGljbGUgPSBmdW5jdGlvbigpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgZXVsZXIgYW5nbGUgdG8gcmVwcmVzZW50IHBhcnRpY2xlIHJvdGF0aW9uXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmxpZmUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5hZ2UgPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zcHJpdGVTaXplID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMud2VpZ2h0ID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZW1pdHRlciA9IG51bGw7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHBhcnRpY2xlIHBvc2l0aW9uXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAqL1xyXG5QYXJ0aWNsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy52ZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5hbmd1bGFyVmVsb2NpdHkuYXJyYXksIGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJ0aWNsZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vUGFydGljbGUnO1xyXG5pbXBvcnQgVmFsdWUgZnJvbSAnLi4vbWF0aC9WYWx1ZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRW1pdHRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEVtaXR0ZXIgPSBCYXNlLmV4dGVuZCggLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIGNyZWF0ZWQgYnkgdGhpcyBlbWl0dGVyXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYXg6IDEwMDAsXHJcbiAgICAvKipcclxuICAgICAqIE51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXIgZWFjaCBzaG90XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbW91bnQ6IDIwLFxyXG5cclxuICAgIC8vIEluaXQgc3RhdHVzIGZvciBlYWNoIHBhcnRpY2xlXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGxpZmUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGxpZmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHBvc2l0aW9uIGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcm90YXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgdmVsb2NpdHk6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGFuZ3VsYXIgdmVsb2NpdHkgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgc3ByaXRlIHNpemUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZVNpemU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHdlaWdodCBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgd2VpZ2h0OiBudWxsLFxyXG5cclxuICAgIF9wYXJ0aWNsZVBvb2w6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlUG9vbCA9IFtdO1xyXG5cclxuICAgIC8vIFRPRE8gUmVkdWNlIGhlYXAgbWVtb3J5XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4OyBpKyspIHtcclxuICAgICAgICB2YXIgcGFydGljbGUgPSBuZXcgUGFydGljbGUoKTtcclxuICAgICAgICBwYXJ0aWNsZS5lbWl0dGVyID0gdGhpcztcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0dGVyIG51bWJlciBvZiBwYXJ0aWNsZXMgYW5kIHB1c2ggdGhlbSB0byBhIGdpdmVuIHBhcnRpY2xlIGxpc3QuIEVtbWl0IG51bWJlciBpcyBkZWZpbmVkIGJ5IGFtb3VudCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPGNsYXkucGFydGljbGUuUGFydGljbGU+fSBvdXRcclxuICAgICAqL1xyXG4gICAgZW1pdDogZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgdmFyIGFtb3VudCA9IE1hdGgubWluKHRoaXMuX3BhcnRpY2xlUG9vbC5sZW5ndGgsIHRoaXMuYW1vdW50KTtcclxuXHJcbiAgICAgICAgdmFyIHBhcnRpY2xlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcclxuICAgICAgICAgICAgcGFydGljbGUgPSB0aGlzLl9wYXJ0aWNsZVBvb2wucG9wKCk7XHJcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgcGFydGljbGUgc3RhdHVzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLmdldChwYXJ0aWNsZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24uZ2V0KHBhcnRpY2xlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS5nZXQocGFydGljbGUudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmd1bGFyVmVsb2NpdHkuZ2V0KHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUubGlmZSA9IHRoaXMubGlmZS5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5zcHJpdGVTaXplID0gdGhpcy5zcHJpdGVTaXplLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUud2VpZ2h0ID0gdGhpcy53ZWlnaHQuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFydGljbGUuYWdlID0gMDtcclxuXHJcbiAgICAgICAgICAgIG91dC5wdXNoKHBhcnRpY2xlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBLaWxsIGEgZGVhZCBwYXJ0aWNsZSBhbmQgcHV0IGl0IGJhY2sgaW4gdGhlIHBvb2xcclxuICAgICAqIEBwYXJhbSAge2NsYXkucGFydGljbGUuUGFydGljbGV9IHBhcnRpY2xlXHJcbiAgICAgKi9cclxuICAgIGtpbGw6IGZ1bmN0aW9uKHBhcnRpY2xlKSB7XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVQb29sLnB1c2gocGFydGljbGUpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS5jb25zdGFudH1cclxuICogQGZ1bmN0aW9uIGNsYXkucGFydGljbGUuRW1pdHRlci5jb25zdGFudFxyXG4gKi9cclxuRW1pdHRlci5jb25zdGFudCA9IFZhbHVlLmNvbnN0YW50O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IHZlY3RvciB2YWx1ZSgyZCBvciAzZCkgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUudmVjdG9yfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnZlY3RvclxyXG4gKi9cclxuRW1pdHRlci52ZWN0b3IgPSBWYWx1ZS52ZWN0b3I7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTFEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTFEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTFEID0gVmFsdWUucmFuZG9tMUQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDJkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTJEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTJEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTJEID0gVmFsdWUucmFuZG9tMkQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTNEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTNEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTNEID0gVmFsdWUucmFuZG9tM0Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbWl0dGVyO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBGaWVsZCA9IEJhc2UuZXh0ZW5kKHt9LCB7XHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgZmllbGQgdG8gdGhlIHBhcnRpY2xlIGFuZCB1cGRhdGUgdGhlIHBhcnRpY2xlIHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHdlaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnBhcnRpY2xlLkZpZWxkLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZpZWxkO1xyXG4iLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9GaWVsZCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKi9cclxudmFyIEZvcmNlRmllbGQgPSBGaWVsZC5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZvcmNlOiBuZXcgVmVjdG9yMygpXHJcbiAgICB9O1xyXG59LCB7XHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgaWYgKHdlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh2ZWxvY2l0eS5hcnJheSwgdmVsb2NpdHkuYXJyYXksIHRoaXMuZm9yY2UuYXJyYXksIGRlbHRhVGltZSAvIHdlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZvcmNlRmllbGQ7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnBhcnRpY2xlLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXcgOiBXT1JMRFZJRVc7XFxudW5pZm9ybSBtYXQ0IHByb2plY3Rpb24gOiBQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsIDogTk9STUFMO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDAgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMSA6IFRFWENPT1JEXzE7XFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbnZvaWQgbWFpbigpIHtcXG4gdl9BZ2UgPSBub3JtYWwueDtcXG4gZmxvYXQgcm90YXRpb24gPSBub3JtYWwueTtcXG4gdmVjNCB3b3JsZFZpZXdQb3NpdGlvbiA9IHdvcmxkVmlldyAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHdvcmxkVmlld1Bvc2l0aW9uO1xcbiBmbG9hdCB3ID0gZ2xfUG9zaXRpb24udztcXG4gZ2xfUG9pbnRTaXplID0gbm9ybWFsLnogKiBwcm9qZWN0aW9uWzBdLnggLyB3O1xcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIHZfVXYwID0gdGV4Y29vcmQwO1xcbiB2X1V2MSA9IHRleGNvb3JkMTtcXG4gI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGFydGljbGUuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcHJpdGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnQ7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgY29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuICNpZmRlZiBTUFJJVEVfRU5BQkxFRFxcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIGNvbG9yICo9IHRleHR1cmUyRChzcHJpdGUsIG1peCh2X1V2MCwgdl9VdjEsIGdsX1BvaW50Q29vcmQpKTtcXG4gI2Vsc2VcXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgZ2xfUG9pbnRDb29yZCk7XFxuICNlbmRpZlxcbiAjZW5kaWZcXG4gI2lmZGVmIEdSQURJRU5UX0VOQUJMRURcXG4gY29sb3IgKj0gdGV4dHVyZTJEKGdyYWRpZW50LCB2ZWMyKHZfQWdlLCAwLjUpKTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHBhcnRpY2xlRXNzbCBmcm9tICcuL3BhcnRpY2xlLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHBhcnRpY2xlRXNzbCk7XHJcblxyXG52YXIgcGFydGljbGVTaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUuZnJhZ21lbnQnKSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHBhcnRpY2xlUmVuZGVyYWJsZSA9IG5ldyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uUmVwZWF0OiAxXHJcbiAqICAgICB9KTtcclxuICogICAgIHNjZW5lLmFkZChwYXJ0aWNsZVJlbmRlcmFibGUpO1xyXG4gKiAgICAgLy8gRW5hYmxlIHV2IGFuaW1hdGlvbiBpbiB0aGUgc2hhZGVyXHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubWF0ZXJpYWwuZGVmaW5lKCdib3RoJywgJ1VWX0FOSU1BVElPTicpO1xyXG4gKiAgICAgdmFyIEVtaXR0ZXIgPSBjbGF5LnBhcnRpY2xlLkVtaXR0ZXI7XHJcbiAqICAgICB2YXIgVmVjdG9yMyA9IGNsYXkuVmVjdG9yMztcclxuICogICAgIHZhciBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoe1xyXG4gKiAgICAgICAgIG1heDogMjAwMCxcclxuICogICAgICAgICBhbW91bnQ6IDEwMCxcclxuICogICAgICAgICBsaWZlOiBFbWl0dGVyLnJhbmRvbTFEKDEwLCAyMCksXHJcbiAqICAgICAgICAgcG9zaXRpb246IEVtaXR0ZXIudmVjdG9yKG5ldyBWZWN0b3IzKCkpLFxyXG4gKiAgICAgICAgIHZlbG9jaXR5OiBFbWl0dGVyLnJhbmRvbTNEKG5ldyBWZWN0b3IzKC0xMCwgMCwgLTEwKSwgbmV3IFZlY3RvcjMoMTAsIDAsIDEwKSk7XHJcbiAqICAgICB9KTtcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGRFbWl0dGVyKGVtaXR0ZXIpO1xyXG4gKiAgICAgdmFyIGdyYXZpdHlGaWVsZCA9IG5ldyBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGQoKTtcclxuICogICAgIGdyYXZpdHlGaWVsZC5mb3JjZS55ID0gLTEwO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEZpZWxkKGdyYXZpdHlGaWVsZCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUudXBkYXRlUGFydGljbGVzKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgUGFydGljbGVSZW5kZXJhYmxlID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgbG9vcDogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIG9uZXNob3Q6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBEdXJhdGlvbiBvZiBwYXJ0aWNsZSBzeXN0ZW0gaW4gbWlsbGlzZWNvbmRzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkdXJhdGlvbjogMSxcclxuXHJcbiAgICAvLyBVViBBbmltYXRpb25cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblRpbGVZOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDAsXHJcblxyXG4gICAgbW9kZTogUmVuZGVyYWJsZS5QT0lOVFMsXHJcblxyXG4gICAgaWdub3JlUGlja2luZzogdHJ1ZSxcclxuXHJcbiAgICBfZWxhcHNlZFRpbWU6IDAsXHJcblxyXG4gICAgX2VtaXR0aW5nOiB0cnVlXHJcblxyXG59LCBmdW5jdGlvbigpe1xyXG5cclxuICAgIHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5tYXRlcmlhbCkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHBhcnRpY2xlU2hhZGVyLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ3Nwcml0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlcyA9IFtdO1xyXG4gICAgdGhpcy5fZmllbGRzID0gW107XHJcbiAgICB0aGlzLl9lbWl0dGVycyA9IFtdO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG4gICAgcmVjZWl2ZVNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgYWRkRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnB1c2goZW1pdHRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGVtaXR0ZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5FbWl0dGVyfSBlbWl0dGVyXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVtaXR0ZXI6IGZ1bmN0aW9uKGVtaXR0ZXIpIHtcclxuICAgICAgICB0aGlzLl9lbWl0dGVycy5zcGxpY2UodGhpcy5fZW1pdHRlcnMuaW5kZXhPZihlbWl0dGVyKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGZpZWxkXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRmllbGR9IGZpZWxkXHJcbiAgICAgKi9cclxuICAgIGFkZEZpZWxkOiBmdW5jdGlvbihmaWVsZCkge1xyXG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZSh0aGlzLl9maWVsZHMuaW5kZXhPZihmaWVsZCksIDEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoZSBwYXJ0aWNsZSBzeXN0ZW0uXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuX2VtaXR0aW5nID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVQYXJ0aWNsZXM6IGZ1bmN0aW9uKGRlbHRhVGltZSkge1xyXG5cclxuICAgICAgICAvLyBNUyA9PiBTZWNvbmRzXHJcbiAgICAgICAgZGVsdGFUaW1lIC89IDEwMDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgKz0gZGVsdGFUaW1lO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGVzID0gdGhpcy5fcGFydGljbGVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZW1pdHRpbmcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9lbWl0dGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlcnNbaV0uZW1pdChwYXJ0aWNsZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uZXNob3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFnaW5nXHJcbiAgICAgICAgdmFyIGxlbiA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmFnZSArPSBkZWx0YVRpbWU7XHJcbiAgICAgICAgICAgIGlmIChwLmFnZSA+PSBwLmxpZmUpIHtcclxuICAgICAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzW2ldID0gcGFydGljbGVzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZVxyXG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1tqXS5hcHBseVRvKHAudmVsb2NpdHksIHAucG9zaXRpb24sIHAud2VpZ2h0LCBkZWx0YVRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHAudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICAgICAgLy8gSWYgaGFzIHV2IGFuaW1hdGlvblxyXG4gICAgICAgIHZhciBhbmltVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG4gICAgICAgIHZhciBhbmltVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHZhciBhbmltUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgdmFyIG5VdkFuaW1GcmFtZSA9IGFuaW1UaWxlWSAqIGFuaW1UaWxlWCAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgdmFyIGhhc1V2QW5pbWF0aW9uID0gblV2QW5pbUZyYW1lID4gMTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICAvLyBQdXQgcGFydGljbGUgc3RhdHVzIGluIG5vcm1hbFxyXG4gICAgICAgIHZhciBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHZhciB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoO1xyXG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8IHBvc2l0aW9ucy5sZW5ndGggIT09IGxlbiAqIDMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgICAgICBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgaWYgKGhhc1V2QW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB1dnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgICAgICB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52QW5pbVRpbGVYID0gMSAvIGFuaW1UaWxlWDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zW29mZnNldCArIGpdID0gcGFydGljbGUucG9zaXRpb24uYXJyYXlbal07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldF0gPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsc1tvZmZzZXQgKyAxXSA9IHBhcnRpY2xlLnJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDJdID0gcGFydGljbGUuc3ByaXRlU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0MiA9IGkgKiAyO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIHZhciBwID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcclxuICAgICAgICAgICAgICAgIHZhciBzdGFnZSA9IE1hdGgucm91bmQocCAqIChuVXZBbmltRnJhbWUgLSAxKSkgKiBhbmltUmVwZWF0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBNYXRoLmZsb29yKHN0YWdlICogaW52QW5pbVRpbGVYKTtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gc3RhZ2UgLSB2ICogYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDJdID0gdSAvIGFuaW1UaWxlWDtcclxuICAgICAgICAgICAgICAgIHV2c1tvZmZzZXQyICsgMV0gPSAxIC0gdiAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0Ml0gPSAodSArIDEpIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyICsgMV0gPSAxIC0gKHYgKyAxKSAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0ZpbmlzaGVkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWUgPiB0aGlzLmR1cmF0aW9uICYmICF0aGlzLmxvb3A7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBUT0RPIERpc3Bvc2UgdGV4dHVyZSA/XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IFBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLm1hdGVyaWFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUub25lc2hvdCA9IHRoaXMub25lc2hvdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG5cclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucm90YXRpb24uY29weSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkKHRoaXMuX2NoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFydGljbGVSZW5kZXJhYmxlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlUmVuZGVyYWJsZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGlja2luZy5jb2xvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGVuZFxcbkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLmZyYWdtZW50XFxudW5pZm9ybSB2ZWM0IGNvbG9yIDogWzEuMCwgMS4wLCAxLjAsIDEuMF07XFxudm9pZCBtYWluKCkge1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBjb2xvckVzc2wgZnJvbSAnLi9jb2xvci5nbHNsLmpzJztcclxuU2hhZGVyLmltcG9ydChjb2xvckVzc2wpO1xyXG5cclxuLyoqXHJcbiAqIFBpeGVsIHBpY2tpbmcgaXMgZ3B1IGJhc2VkIHBpY2tpbmcsIHdoaWNoIGlzIGZhc3QgYW5kIGFjY3VyYXRlLlxyXG4gKiBCdXQgbm90IGxpa2UgcmF5IHBpY2tpbmcsIGl0IGNhbid0IGdldCB0aGUgaW50ZXJzZWN0aW9uIHBvaW50IGFuZCB0cmlhbmdsZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmdcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQaXhlbFBpY2tpbmcgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb3duc2FtcGxlIHJhdGlvIG9mIGhpZGRlbiBmcmFtZSBidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvd25TYW1wbGVSYXRpbzogMSxcclxuXHJcbiAgICAgICAgd2lkdGg6IDEwMCxcclxuICAgICAgICBoZWlnaHQ6IDEwMCxcclxuXHJcbiAgICAgICAgbG9va3VwT2Zmc2V0OiAxLFxyXG5cclxuICAgICAgICBfZnJhbWVCdWZmZXI6IG51bGwsXHJcbiAgICAgICAgX3RleHR1cmU6IG51bGwsXHJcbiAgICAgICAgX3NoYWRlcjogbnVsbCxcclxuXHJcbiAgICAgICAgX2lkTWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICBfbG9va3VwVGFibGU6IFtdLFxyXG5cclxuICAgICAgICBfbWVzaE1hdGVyaWFsczogW10sXHJcblxyXG4gICAgICAgIF9pZE9mZnNldDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdCgpO1xyXG59LCAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcucHJvdG90eXBlICovIHtcclxuICAgIF9pbml0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoICogdGhpcy5kb3duU2FtcGxlUmF0aW8sXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgKiB0aGlzLmRvd25TYW1wbGVSYXRpb1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5waWNraW5nLmNvbG9yLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnQnKSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGlja2luZyBwcmVzaXNpb25cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXRQcmVjaXNpb246IGZ1bmN0aW9uKHJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGggKiByYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICogcmF0aW87XHJcbiAgICAgICAgdGhpcy5kb3duU2FtcGxlUmF0aW8gPSByYXRpbztcclxuICAgIH0sXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gd2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IGhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIHBpY2tpbmcgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIGlmIChyZW5kZXJlci5nZXRXaWR0aCgpICE9PSB0aGlzLndpZHRoIHx8IHJlbmRlcmVyLmdldEhlaWdodCgpICE9PSB0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci53aWR0aCwgcmVuZGVyZXIuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0aGlzLl90ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9pZE9mZnNldCA9IHRoaXMubG9va3VwT2Zmc2V0O1xyXG4gICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKHNjZW5lKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVzdG9yZU1hdGVyaWFsKCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE1hdGVyaWFsOiBmdW5jdGlvbihyb290KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9MDsgaSA8IHJvb3QuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJvb3QuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuZ2VvbWV0cnkgJiYgY2hpbGQubWF0ZXJpYWwgJiYgY2hpbGQubWF0ZXJpYWwuc2hhZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9pZE9mZnNldCsrO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IGlkIC0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9zaGFkZXJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBwYWNrSUQoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzBdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsxXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMl0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzNdID0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnY29sb3InLCBjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faWRNYXRlcmlhbHNbaWR4XSA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFsc1tpZHhdID0gY2hpbGQubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpZHhdID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5tYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXRlcmlhbChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGljayB0aGUgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIHZhciByYXRpbyA9IHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHggPSBNYXRoLmNlaWwocmF0aW8gKiB4KTtcclxuICAgICAgICB5ID0gTWF0aC5jZWlsKHJhdGlvICogKHRoaXMuaGVpZ2h0IC0geSkpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgcGl4ZWwgPSBuZXcgVWludDhBcnJheSg0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgLy8gVE9ETyBvdXQgb2YgYm91bmRzID9cclxuICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgP1xyXG4gICAgICAgIF9nbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIF9nbC5SR0JBLCBfZ2wuVU5TSUdORURfQllURSwgcGl4ZWwpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gU2tpcCBpbnRlcnBvbGF0ZWQgcGl4ZWwgYmVjYXVzZSBvZiBhbnRpIGFsaWFzXHJcbiAgICAgICAgaWYgKHBpeGVsWzNdID09PSAyNTUpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gdW5wYWNrSUQocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5fbG9va3VwVGFibGVbaWQgLSB0aGlzLmxvb2t1cE9mZnNldF07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0b3JlTWF0ZXJpYWw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbG9va3VwVGFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaV0ubWF0ZXJpYWwgPSB0aGlzLl9tZXNoTWF0ZXJpYWxzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBwYWNrSUQoaWQpe1xyXG4gICAgdmFyIHIgPSBpZCA+PiAxNjtcclxuICAgIHZhciBnID0gKGlkIC0gKHIgPDwgOCkpID4+IDg7XHJcbiAgICB2YXIgYiA9IGlkIC0gKHIgPDwgMTYpIC0gKGc8PDgpO1xyXG4gICAgcmV0dXJuIFtyLCBnLCBiXTtcclxufVxyXG5cclxuZnVuY3Rpb24gdW5wYWNrSUQociwgZywgYil7XHJcbiAgICByZXR1cm4gKHIgPDwgMTYpICsgKGc8PDgpICsgYjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGl4ZWxQaWNraW5nO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2xcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBjb250cm9sID0gbmV3IGNsYXkucGx1Z2luLkZyZWVDb250cm9sKHtcclxuICogICAgICAgICB0YXJnZXQ6IGNhbWVyYSxcclxuICogICAgICAgICBkb21FbGVtZW50OiByZW5kZXJlci5jYW52YXNcclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICB0aW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBjb250cm9sLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIEZyZWVDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCBkb20gdG8gYmluZCB3aXRoIG1vdXNlIGV2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkb21FbGVtZW50OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNb3VzZSBtb3ZlIHNlbnNpdGl2aXR5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IG1vdmUgc3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNwZWVkOiAwLjQsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXNcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgbG9jayB2ZXJ0aWNhbCBtb3ZlbWVudFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlcnRpY2FsTW92ZUxvY2s6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgX21vdmVGb3J3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUJhY2t3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUxlZnQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlUmlnaHQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfb2Zmc2V0UGl0Y2g6IDAsXHJcbiAgICAgICAgX29mZnNldFJvbGw6IDBcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fbG9ja0NoYW5nZSA9IHRoaXMuX2xvY2tDaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleURvd24gPSB0aGlzLl9rZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9rZXlVcCA9IHRoaXMuX2tleVVwLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmUgPSB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlzKTtcclxuXHJcbiAgICBpZiAodGhpcy5kb21FbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogaW5pdCBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFVzZSBwb2ludGVyIGxvY2tcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL3R1dG9yaWFscy9wb2ludGVybG9jay9pbnRyby9cclxuICAgICAgICB2YXIgZWwgPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vTXVzdCByZXF1ZXN0IHBvaW50ZXIgbG9jayBhZnRlciBjbGljayBldmVudCwgY2FuJ3Qgbm90IGRvIGl0IGRpcmVjdGx5XHJcbiAgICAgICAgLy9XaHkgPyA/XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdjbGljaycsIHRoaXMuX3JlcXVlc3RQb2ludGVyTG9jayk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW96cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXlkb3duJywgdGhpcy5fa2V5RG93bik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAna2V5dXAnLCB0aGlzLl9rZXlVcCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrID0gZWwuZXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLm1vekV4aXRQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC53ZWJraXRFeGl0UG9pbnRlckxvY2s7XHJcblxyXG4gICAgICAgIGlmIChlbC5leGl0UG9pbnRlckxvY2spIHtcclxuICAgICAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlcXVlc3RQb2ludGVyTG9jazogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGVsID0gdGhpcztcclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2sgPSBlbC5yZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96UmVxdWVzdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdFJlcXVlc3RQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgZWwucmVxdWVzdFBvaW50ZXJMb2NrKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbCB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVydGljYWxNb3ZlTG9jaykge1xyXG4gICAgICAgICAgICB6QXhpcy55ID0gMDtcclxuICAgICAgICAgICAgekF4aXMubm9ybWFsaXplKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3BlZWQgPSB0aGlzLnNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2YgelxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLXNwZWVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVCYWNrd2FyZCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1zcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBzcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCA9IHRoaXMuX29mZnNldFBpdGNoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2xvY2tDaGFuZ2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZG9jLnBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy5tb3pQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICAgICB8fCBkb2Mud2Via2l0UG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlTW92ZTogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHZhciBkeCA9IGUubW92ZW1lbnRYIHx8IGUubW96TW92ZW1lbnRYIHx8IGUud2Via2l0TW92ZW1lbnRYIHx8IDA7XHJcbiAgICAgICAgdmFyIGR5ID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pNb3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZHggKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZHkgKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG5cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RldGVjdE1vdmVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkIHx8IHRoaXMuX21vdmVCYWNrd2FyZCB8fCB0aGlzLl9tb3ZlTGVmdCB8fCB0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoZnJhbWVUaW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleURvd246IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgODc6IC8vd1xyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL3VwIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2ODogLy9kXHJcbiAgICAgICAgICAgIGNhc2UgMzk6IC8vcmlnaHQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZXZlbnQgdG8gcmVtaW5kIHJlbmRlcmVyIGRvIHJlbmRlclxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9rZXlVcDogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2NTogLy9hXHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vbGVmdCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJlZUNvbnRyb2w7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIEdhbWVwYWQgQ29udHJvbCBwbHVnaW4uXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgIGluaXQ6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGN1c3RvbUNhbGxiYWNrXHJcbiAqICAgICB9KTtcclxuICogICB9LFxyXG4gKlxyXG4gKiAgIGxvb3A6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wudXBkYXRlKGFwcC5mcmFtZVRpbWUpO1xyXG4gKiAgIH1cclxuICovXHJcbnZhciBHYW1lcGFkQ29udHJvbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdmUgc3BlZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1vdmVTcGVlZDogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMb29rIGFyb3VuZCBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbG9va0Fyb3VuZFNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZWxpbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzdGFuZGFyZCBnYW1lcGFkIGlzIHJlYWR5IHRvIHVzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvblN0YW5kYXJkR2FtZXBhZFJlYWR5OiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIGdhbWVwYWQgaXMgZGlzY29ubmVjdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uR2FtZXBhZERpc2Nvbm5lY3RlZDogZnVuY3Rpb24oZ2FtZXBhZCl7fSxcclxuXHJcbiAgICAgICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzOlxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMCxcclxuXHJcbiAgICAgICAgX2Nvbm5lY3RlZEdhbWVwYWRJbmRleDogMCxcclxuICAgICAgICBfc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICBfZ2FtZXBhZEF4aXNUaHJlc2hvbGQ6IDAuM1xyXG5cclxuICAgIH07XHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5ID0gdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQgPSB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zID0gdGhpcy5fc2NhblByZXNzZWRHYW1lcGFkQnV0dG9ucy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMgPSB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcy5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcclxuXHJcbiAgICAvLyBJZiBicm93c2VyIHN1cHBvcnRzIEdhbWVwYWQgQVBJOlxyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogSW5pdC4gY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZW4gdXNlciBiZWdpbnMgdG8gaW50ZXJhY3Qgd2l0aCBjb25uZWN0ZWQgZ2FtZXBhZDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI2RvbS1nYW1lcGFkZXZlbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGRpc2Nvbm5lY3RlZCcsIHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sJ3MgdXBkYXRlLiBTaG91bGQgYmUgaW52b2tlZCBldmVyeSBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zKCk7XHJcbiAgICAgICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRhcmdldCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dC5cclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmFyIG1vdmVTcGVlZCA9IHRoaXMubW92ZVNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2Ygei5cclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBJZiBuZWNlc3Nhcnk6IHRyaWdnZXIgYHVwZGF0ZWAgZXZlbnQuXHJcbiAgICAgICAgICogWFhYIFRoaXMgY2FuIGVjb25vbWl6ZSByZW5kZXJpbmcgT1BzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlQmFja3dhcmQgPT09IHRydWUgfHwgdGhpcy5fbW92ZUxlZnQgPT09IHRydWVcclxuICAgICAgICAgICAgfHwgdGhpcy5fbW92ZVJpZ2h0ID09PSB0cnVlIHx8IHRoaXMuX29mZnNldFBpdGNoICE9PSAwIHx8IHRoaXMuX29mZnNldFJvbGwgIT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgdmFsdWVzIHRvIGF2b2lkIGxvc3Qgb2YgY29udHJvbC5cclxuXHJcbiAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0aGlzLl9tb3ZlTGVmdCA9IHRoaXMuX21vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFBpdGNoID0gdGhpcy5fb2Zmc2V0Um9sbCA9IDA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBQcml2YXRlIG1ldGhvZHM6XHJcblxyXG4gICAgX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHk6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbm5lY3RlZCBnYW1lcGFkIGhhcyBhICoqc3RhbmRhcmQqKiBsYXlvdXQ6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9nYW1lcGFkLyNyZW1hcHBpbmcgYWJvdXQgc3RhbmRhcmQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKGV2ZW50LmdhbWVwYWQubWFwcGluZyA9PT0gJ3N0YW5kYXJkJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXggPSBldmVudC5nYW1lcGFkLmluZGV4O1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vblN0YW5kYXJkR2FtZXBhZFJlYWR5KGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfZGlzY29ubmVjdEdhbWVwYWQ6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uR2FtZXBhZERpc2Nvbm5lY3RlZChldmVudC5nYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTdGFuZGFyZEdhbWVwYWQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmdldEdhbWVwYWRzKClbdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXhdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnM6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQoKS5idXR0b25zO1xyXG5cclxuICAgICAgICAvLyBGb3IgZWFjaCBnYW1lcGFkIGJ1dHRvbjpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQnV0dG9uSWQgPSAwOyBnYW1lcGFkQnV0dG9uSWQgPCBnYW1lcGFkQnV0dG9ucy5sZW5ndGg7IGdhbWVwYWRCdXR0b25JZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRCdXR0b24gPSBnYW1lcGFkQnV0dG9uc1tnYW1lcGFkQnV0dG9uSWRdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVwYWRCdXR0b24ucHJlc3NlZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2FtZXBhZEJ1dHRvbklkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIFVwXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgRG93blxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9zY2FuSW5jbGluZWRHYW1lcGFkQXhlczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQXhlcyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmF4ZXM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYXhpczpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQXhpc0lkID0gMDsgZ2FtZXBhZEF4aXNJZCA8IGdhbWVwYWRBeGVzLmxlbmd0aDsgZ2FtZXBhZEF4aXNJZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRBeGlzID0gZ2FtZXBhZEF4ZXNbZ2FtZXBhZEF4aXNJZF07XHJcblxyXG4gICAgICAgICAgICAvLyBYWFggV2UgdXNlIGEgdGhyZXNob2xkIGJlY2F1c2UgYXhlcyBhcmUgbmV2ZXIgbmV1dHJhbC5cclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGdhbWVwYWRBeGlzKSA+IHRoaXMuX2dhbWVwYWRBeGlzVGhyZXNob2xkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQXhpc0lkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgc3RpY2sgWMKxXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGdhbWVwYWRBeGlzIDwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZ2FtZXBhZEF4aXMgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFBpdGNoICs9IGdhbWVwYWRBeGlzICogdGhpcy5sb29rQXJvdW5kU3BlZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHYW1lcGFkQ29udHJvbDtcclxuIiwidmFyIEdlc3R1cmVNZ3IgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fdHJhY2sgPSBbXTtcclxufTtcclxuXHJcbkdlc3R1cmVNZ3IucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBHZXN0dXJlTWdyLFxyXG5cclxuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcclxuICAgICAgICB0aGlzLl9kb1RyYWNrKGV2ZW50LCB0YXJnZXQsIHJvb3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvZ25pemUoZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb1RyYWNrOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hlcztcclxuXHJcbiAgICAgICAgaWYgKCF0b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0cmFja0l0ZW0gPSB7XHJcbiAgICAgICAgICAgIHBvaW50czogW10sXHJcbiAgICAgICAgICAgIHRvdWNoZXM6IFtdLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvdWNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gdG91Y2hlc1tpXTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnBvaW50cy5wdXNoKFt0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZXSk7XHJcbiAgICAgICAgICAgIHRyYWNrSXRlbS50b3VjaGVzLnB1c2godG91Y2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2sucHVzaCh0cmFja0l0ZW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcmVjb2duaXplcnMpIHtcclxuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IHJlY29nbml6ZXJzW2V2ZW50TmFtZV0odGhpcy5fdHJhY2ssIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChnZXN0dXJlSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGRpc3QocG9pbnRQYWlyKSB7XHJcbiAgICB2YXIgZHggPSBwb2ludFBhaXJbMV1bMF0gLSBwb2ludFBhaXJbMF1bMF07XHJcbiAgICB2YXIgZHkgPSBwb2ludFBhaXJbMV1bMV0gLSBwb2ludFBhaXJbMF1bMV07XHJcblxyXG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNlbnRlcihwb2ludFBhaXIpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgKHBvaW50UGFpclswXVswXSArIHBvaW50UGFpclsxXVswXSkgLyAyLFxyXG4gICAgICAgIChwb2ludFBhaXJbMF1bMV0gKyBwb2ludFBhaXJbMV1bMV0pIC8gMlxyXG4gICAgXTtcclxufVxyXG5cclxudmFyIHJlY29nbml6ZXJzID0ge1xyXG5cclxuICAgIHBpbmNoOiBmdW5jdGlvbiAodHJhY2ssIGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHRyYWNrTGVuID0gdHJhY2subGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIXRyYWNrTGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwaW5jaEVuZCA9ICh0cmFja1t0cmFja0xlbiAtIDFdIHx8IHt9KS5wb2ludHM7XHJcbiAgICAgICAgdmFyIHBpbmNoUHJlID0gKHRyYWNrW3RyYWNrTGVuIC0gMl0gfHwge30pLnBvaW50cyB8fCBwaW5jaEVuZDtcclxuXHJcbiAgICAgICAgaWYgKHBpbmNoUHJlXHJcbiAgICAgICAgICAgICYmIHBpbmNoUHJlLmxlbmd0aCA+IDFcclxuICAgICAgICAgICAgJiYgcGluY2hFbmRcclxuICAgICAgICAgICAgJiYgcGluY2hFbmQubGVuZ3RoID4gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2YXIgcGluY2hTY2FsZSA9IGRpc3QocGluY2hFbmQpIC8gZGlzdChwaW5jaFByZSk7XHJcbiAgICAgICAgICAgICFpc0Zpbml0ZShwaW5jaFNjYWxlKSAmJiAocGluY2hTY2FsZSA9IDEpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucGluY2hTY2FsZSA9IHBpbmNoU2NhbGU7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGluY2hDZW50ZXIgPSBjZW50ZXIocGluY2hFbmQpO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFggPSBwaW5jaENlbnRlclswXTtcclxuICAgICAgICAgICAgZXZlbnQucGluY2hZID0gcGluY2hDZW50ZXJbMV07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3BpbmNoJyxcclxuICAgICAgICAgICAgICAgIHRhcmdldDogdHJhY2tbMF0udGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZU1ncjtcclxuIiwiaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcblxyXG52YXIgdXZzID0gW1swLCAwXSwgWzAsIDFdLCBbMSwgMV0sIFsxLCAwXV07XHJcbnZhciB0cmlzID0gWzAsIDEsIDIsIDIsIDMsIDBdO1xyXG5cclxudmFyIEluZmluaXRlUGxhbmUgPSBNZXNoLmV4dGVuZCh7XHJcblxyXG4gICAgY2FtZXJhOiBudWxsLFxyXG5cclxuICAgIHBsYW5lOiBudWxsLFxyXG5cclxuICAgIG1heEdyaWQ6IDAsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2KTtcclxuXHJcbiAgICB0aGlzLnBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVHZW9tZXRyeTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgY29vcmRzID0gdGhpcy5fdW5Qcm9qZWN0R3JpZCgpO1xyXG4gICAgICAgIGlmICghY29vcmRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWw7XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDA7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSB0cmlzW2ldO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuc2V0KGksIGNvb3Jkc1tpZHhdLmFycmF5KTtcclxuICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQoaSwgdGhpcy5wbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICB0ZXhjb29yZHMuc2V0KGksIHV2c1tpZHhdKTtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2ZpbGVhZG1pbi5jcy5sdGguc2UvZ3JhcGhpY3MvdGhlc2VzL3Byb2plY3RzL3Byb2pncmlkL1xyXG4gICAgX3VuUHJvamVjdEdyaWQ6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBwbGFuZVZpZXdTcGFjZSA9IG5ldyBQbGFuZSgpO1xyXG4gICAgICAgIHZhciBsaW5lcyA9IFtcclxuICAgICAgICAgICAgMCwgMSwgMCwgMiwgMSwgMywgMiwgMyxcclxuICAgICAgICAgICAgNCwgNSwgNCwgNiwgNSwgNywgNiwgNyxcclxuICAgICAgICAgICAgMCwgNCwgMSwgNSwgMiwgNiwgMywgN1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIGVuZCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gMS0tLS0yXHJcbiAgICAgICAgLy8gfCAgICB8XHJcbiAgICAgICAgLy8gMC0tLS0zXHJcbiAgICAgICAgdmFyIGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvb3Jkc1tpXSA9IG5ldyBWZWN0b3IzKDAsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuY29weSh0aGlzLnBsYW5lKTtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuYXBwbHlUcmFuc2Zvcm0odGhpcy5jYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJ1c3R1bVZlcnRpY2VzID0gdGhpcy5jYW1lcmEuZnJ1c3R1bS52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBuUG9pbnRzID0gMDtcclxuICAgICAgICAgICAgLy8gSW50ZXJzZWN0IHdpdGggbGluZXMgb2YgZnJ1c3R1bVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0LmFycmF5ID0gZnJ1c3R1bVZlcnRpY2VzW2xpbmVzW2kgKiAyXV07XHJcbiAgICAgICAgICAgICAgICBlbmQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDIgKyAxXV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ID0gcGxhbmVWaWV3U3BhY2UuaW50ZXJzZWN0TGluZShzdGFydCwgZW5kLCBwb2ludHNbblBvaW50c10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2ludHNbblBvaW50c10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW25Qb2ludHNdID0gcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5Qb2ludHMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoblBvaW50cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHNbaV0uYXBwbHlQcm9qZWN0aW9uKHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBtaW5YID0gcG9pbnRzWzBdLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgbWluWSA9IHBvaW50c1swXS5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmFyIG1heFggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtYXhZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG5Qb2ludHM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwb2ludHNbaV0uYXJyYXlbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvaW50c1tpXS5hcnJheVsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1pblggPT0gbWF4WCB8fCBtaW5ZID09IG1heFkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMV0gPSBtaW5ZO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMV0gPSBtaW5ZO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmNhc3RSYXkoY29vcmRzW2ldLCByYXkpO1xyXG4gICAgICAgICAgICAgICAgcmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIGNvb3Jkc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZHM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZVBsYW5lO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciBmcm9tICcuL0dlc3R1cmVNZ3InO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG52YXIgTU9VU0VfQlVUVE9OX0tFWV9NQVAgPSB7XHJcbiAgICBsZWZ0OiAwLFxyXG4gICAgbWlkZGxlOiAxLFxyXG4gICAgcmlnaHQ6IDJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGZpcnN0Tm90TnVsbCgpIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRUb0FycmF5KHZhbCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcclxuICAgICAgICB2YWwgPSBbdmFsLCB2YWxdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgT3JiaXRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLk9yYml0Q29udHJvbCMgKi8ge1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NlbnRlcjogbmV3IFZlY3RvcjMoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBkaXN0YW5jZSB0byB0aGUgY2VudGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5EaXN0YW5jZTogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDJcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhEaXN0YW5jZTogMTAwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT25seSBhdmFpbGFibGUgd2hlbiBjYW1lcmEgaXMgb3J0aG9ncmFwaGljXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4T3J0aG9ncmFwaGljU2l6ZTogMzAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5PcnRob2dyYXBoaWNTaXplOiAzMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXNwZWN0IG9mIG9ydGhvZ3JhcGhpYyBjYW1lcmFcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBvcnRob2dyYXBoaWNBc3BlY3Q6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5BbHBoYTogLTkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGFscGhhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QWxwaGE6IDkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5CZXRhOiAtSW5maW5pdHksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWF4aW11bSBiZXRhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QmV0YTogSW5maW5pdHksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YXJ0IGF1dG8gcm90YXRpbmcgYWZ0ZXIgc3RpbGwgZm9yIHRoZSBnaXZlbiB0aW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZUFmdGVyU3RpbGw6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERpcmVjdGlvbiBvZiBhdXRvUm90YXRlLiBjdyBvciBjY3cgd2hlbiBsb29raW5nIHRvcCBkb3duLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9Sb3RhdGVEaXJlY3Rpb246ICdjdycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZ3JlZSBwZXIgc2Vjb25kXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZVNwZWVkOiA2MCxcclxuXHJcbiAgICAgICAgcGFuTW91c2VCdXR0b246ICdtaWRkbGUnLFxyXG4gICAgICAgIHJvdGF0ZU1vdXNlQnV0dG9uOiAnbGVmdCcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBhbiBvciByb3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2RlOiAncm90YXRlJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGFtcGluZzogMC44LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3RhdGVTZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgem9vbVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwYW5TZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgX25lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3JvdGF0aW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gUm90YXRpb24gYXJvdW5kIHlBeGlzXHJcbiAgICAgICAgX3BoaTogMCxcclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeEF4aXNcclxuICAgICAgICBfdGhldGE6IDAsXHJcblxyXG4gICAgICAgIF9tb3VzZVg6IDAsXHJcbiAgICAgICAgX21vdXNlWTogMCxcclxuXHJcbiAgICAgICAgX3JvdGF0ZVZlbG9jaXR5OiBuZXcgVmVjdG9yMigpLFxyXG5cclxuICAgICAgICBfcGFuVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9kaXN0YW5jZTogMjAsXHJcblxyXG4gICAgICAgIF96b29tU3BlZWQ6IDAsXHJcblxyXG4gICAgICAgIF9zdGlsbFRpbWVvdXQ6IDAsXHJcblxyXG4gICAgICAgIF9hbmltYXRvcnM6IFtdLFxyXG5cclxuICAgICAgICBfZ2VzdHVyZU1ncjogbmV3IEdlc3R1cmVNZ3IoKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gRWFjaCBPcmJpdENvbnRyb2wgaGFzIGl0J3Mgb3duIGhhbmRsZXJcclxuICAgIHRoaXMuX21vdXNlRG93bkhhbmRsZXIgPSB0aGlzLl9tb3VzZURvd25IYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlciA9IHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyID0gdGhpcy5fbW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fbW91c2VVcEhhbmRsZXIgPSB0aGlzLl9tb3VzZVVwSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fcGluY2hIYW5kbGVyID0gdGhpcy5fcGluY2hIYW5kbGVyLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemUuXHJcbiAgICAgKiBNb3VzZSBldmVudCBiaW5kaW5nXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaHN0YXJ0JywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlZG93bicsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9uKCdmcmFtZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UuXHJcbiAgICAgKiBNb3VzZSBldmVudCB1bmJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2V1cCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd3aGVlbCcsIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW91dCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb24oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGlzdGFuY2VcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICAgICAqL1xyXG4gICAgc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRPcnRob2dyYXBoaWNTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29ydGhvU2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgc2l6ZSBvZiBvcnRob2dyYXBoaWMgdmlld2luZyB2b2x1bWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXHJcbiAgICAgKi9cclxuICAgIHNldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gc2l6ZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFscGhhIHJvdGF0aW9uXHJcbiAgICAgKiBBbHBoYSBhbmdsZSBmb3IgdG9wLWRvd24gcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byB0b3AuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB4IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEFscGhhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZXRhIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYmV0YSByb3RhdGlvblxyXG4gICAgICogQmV0YSBhbmdsZSBmb3IgbGVmdC1yaWdodCByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHJpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIFdoaWNoIG1lYW5zIGNhbWVyYSByb3RhdGlvbiBhcm91bmQgeSBheGlzLlxyXG4gICAgICovXHJcbiAgICBnZXRCZXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIC10aGlzLl9waGkgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jZW50ZXIudG9BcnJheSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbHBoYSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFscGhhXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpIHtcclxuICAgICAgICBhbHBoYSA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4QWxwaGEsIGFscGhhKSwgdGhpcy5taW5BbHBoYSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYmV0YSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJldGFcclxuICAgICAqL1xyXG4gICAgc2V0QmV0YTogZnVuY3Rpb24gKGJldGEpIHtcclxuICAgICAgICBiZXRhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhCZXRhLCBiZXRhKSwgdGhpcy5taW5CZXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29udHJvbCBjZW50ZXJcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGNlbnRlclxyXG4gICAgICovXHJcbiAgICBzZXRDZW50ZXI6IGZ1bmN0aW9uIChjZW50ZXJBcnIpIHtcclxuICAgICAgICB0aGlzLl9jZW50ZXIuc2V0QXJyYXkoY2VudGVyQXJyKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0T3B0aW9uOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgICAgICBbJ2F1dG9Sb3RhdGUnLCAnYXV0b1JvdGF0ZUFmdGVyU3RpbGwnLFxyXG4gICAgICAgICAgICAnYXV0b1JvdGF0ZURpcmVjdGlvbicsICdhdXRvUm90YXRlU3BlZWQnLFxyXG4gICAgICAgICAgICAnZGFtcGluZycsXHJcbiAgICAgICAgICAgICdtaW5EaXN0YW5jZScsICdtYXhEaXN0YW5jZScsXHJcbiAgICAgICAgICAgICdtaW5PcnRob2dyYXBoaWNTaXplJywgJ21heE9ydGhvZ3JhcGhpY1NpemUnLCAnb3J0aG9ncmFwaGljQXNwZWN0JyxcclxuICAgICAgICAgICAgJ21pbkFscGhhJywgJ21heEFscGhhJywgJ21pbkJldGEnLCAnbWF4QmV0YScsXHJcbiAgICAgICAgICAgICdyb3RhdGVTZW5zaXRpdml0eScsICd6b29tU2Vuc2l0aXZpdHknLCAncGFuU2Vuc2l0aXZpdHknXHJcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKG9wdHNba2V5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldERpc3RhbmNlKG9wdHMuZGlzdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRPcnRob2dyYXBoaWNTaXplKG9wdHMub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWxwaGEob3B0cy5hbHBoYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEJldGEob3B0cy5iZXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmNlbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcihvcHRzLmNlbnRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLm9ydGhvZ3JhcGhpY1NpemVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmFscGhhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5iZXRhXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvcHRzLmNlbnRlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmR1cmF0aW9uPTEwMDBdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZWFzaW5nPSdsaW5lYXInXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmRvbmVdXHJcbiAgICAgKi9cclxuICAgIGFuaW1hdGVUbzogZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBvYmogPSB7fTtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0ge307XHJcbiAgICAgICAgdmFyIHRpbWVsaW5lID0gdGhpcy50aW1lbGluZTtcclxuICAgICAgICBpZiAoIXRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5kaXN0YW5jZSA9IG9wdHMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmoub3J0aG9ncmFwaGljU2l6ZSA9IHRoaXMuZ2V0T3J0aG9ncmFwaGljU2l6ZSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQub3J0aG9ncmFwaGljU2l6ZSA9IG9wdHMub3J0aG9ncmFwaGljU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYWxwaGEgPSB0aGlzLmdldEFscGhhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbHBoYSA9IG9wdHMuYWxwaGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYmV0YSA9IHRoaXMuZ2V0QmV0YSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQuYmV0YSA9IG9wdHMuYmV0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb2JqLmNlbnRlciA9IHRoaXMuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5jZW50ZXIgPSBvcHRzLmNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRBbmltYXRvcihcclxuICAgICAgICAgICAgdGltZWxpbmUuYW5pbWF0ZShvYmopXHJcbiAgICAgICAgICAgICAgICAud2hlbihvcHRzLmR1cmF0aW9uIHx8IDEwMDAsIHRhcmdldClcclxuICAgICAgICAgICAgICAgIC5kdXJpbmcoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldEFscGhhKG9iai5hbHBoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QmV0YShvYmouYmV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERpc3RhbmNlKG9iai5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0T3J0aG9ncmFwaGljU2l6ZShvYmoub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRDZW50ZXIob2JqLmNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZG9uZShvcHRzLmRvbmUpXHJcbiAgICAgICAgKS5zdGFydChvcHRzLmVhc2luZyB8fCAnbGluZWFyJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBhbGwgYW5pbWF0aW9uc1xyXG4gICAgICovXHJcbiAgICBzdG9wQWxsQW5pbWF0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9hbmltYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0b3JzW2ldLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0b3JzLmxlbmd0aCA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pc0FuaW1hdGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID4gMDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGwgdXBkYXRlIGVhY2ggZnJhbWVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIGRlbHRhVGltZSA9IGRlbHRhVGltZSB8fCAxNjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XHJcbiAgICAgICAgICAgIHZhciByYWRpYW4gPSAodGhpcy5hdXRvUm90YXRlRGlyZWN0aW9uID09PSAnY3cnID8gMSA6IC0xKVxyXG4gICAgICAgICAgICAgICAgKiB0aGlzLmF1dG9Sb3RhdGVTcGVlZCAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BoaSAtPSByYWRpYW4gKiBkZWx0YVRpbWUgLyAxMDAwO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3JvdGF0ZVZlbG9jaXR5LmxlbigpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5fem9vbVNwZWVkKSA+IDAuMDEgfHwgdGhpcy5fcGFuVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fbmVlZHNVcGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRml4ZWQgZGVsdGFUaW1lXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzdGFuY2VPclNpemUoTWF0aC5taW4oZGVsdGFUaW1lLCA1MCkpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhbihNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVJvdGF0ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCd1cGRhdGUnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVJvdGF0ZTogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3JvdGF0ZVZlbG9jaXR5O1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IHZlbG9jaXR5LnkgKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3BoaTtcclxuICAgICAgICB0aGlzLl90aGV0YSA9IHZlbG9jaXR5LnggKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3RoZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEFscGhhKHRoaXMuZ2V0QWxwaGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRCZXRhKHRoaXMuZ2V0QmV0YSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgdGhpcy5kYW1waW5nKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZURpc3RhbmNlT3JTaXplOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy5fZGlzdGFuY2UgKyB0aGlzLl96b29tU3BlZWQgKiBkZWx0YVRpbWUgLyAyMCk7XHJcbiAgICAgICAgaWYgKCEodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMuX29ydGhvU2l6ZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3pvb21TcGVlZCAqPSBNYXRoLnBvdyh0aGlzLmRhbXBpbmcsIGRlbHRhVGltZSAvIDE2KTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldERpc3RhbmNlOiBmdW5jdGlvbiAoZGlzdGFuY2UpIHtcclxuICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKGRpc3RhbmNlLCB0aGlzLm1heERpc3RhbmNlKSwgdGhpcy5taW5EaXN0YW5jZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRPcnRob1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gTWF0aC5tYXgoTWF0aC5taW4oc2l6ZSwgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplKSwgdGhpcy5taW5PcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy50YXJnZXQ7XHJcbiAgICAgICAgdmFyIGNhbWVyYUhlaWdodCA9IHRoaXMuX29ydGhvU2l6ZTtcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgdmFyIGNhbWVyYVdpZHRoID0gY2FtZXJhSGVpZ2h0ICogdGhpcy5vcnRob2dyYXBoaWNBc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGNhbWVyYVdpZHRoIC8gMjtcclxuICAgICAgICBjYW1lcmEudG9wID0gY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gLWNhbWVyYUhlaWdodCAvIDI7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVQYW46IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB2YXIgdmVsb2NpdHkgPSB0aGlzLl9wYW5WZWxvY2l0eTtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fZGlzdGFuY2U7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgeUF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueTtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueDtcclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHRoaXMuX2NlbnRlclxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeEF4aXMsIC12ZWxvY2l0eS54ICogbGVuIC8gMjAwKVxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeUF4aXMsIC12ZWxvY2l0eS55ICogbGVuIC8gMjAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgMCk7XHJcblxyXG4gICAgICAgIHZlbG9jaXR5LnggPSB2ZWxvY2l0eS55ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgdmFyIGRpciA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5fdGhldGEgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgcGhpID0gdGhpcy5fcGhpICsgTWF0aC5QSSAvIDI7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnNpbih0aGV0YSk7XHJcblxyXG4gICAgICAgIGRpci54ID0gciAqIE1hdGguY29zKHBoaSk7XHJcbiAgICAgICAgZGlyLnkgPSAtTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgIGRpci56ID0gciAqIE1hdGguc2luKHBoaSk7XHJcblxyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMuX2NlbnRlcikuc2NhbGVBbmRBZGQoZGlyLCB0aGlzLl9kaXN0YW5jZSk7XHJcbiAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmlkZW50aXR5KClcclxuICAgICAgICAgICAgLy8gRmlyc3QgYXJvdW5kIHksIHRoZW4gYXJvdW5kIHhcclxuICAgICAgICAgICAgLnJvdGF0ZVkoLXRoaXMuX3BoaSlcclxuICAgICAgICAgICAgLnJvdGF0ZVgoLXRoaXMuX3RoZXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3N0YXJ0Q291bnRpbmdTdGlsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGlsbFRpbWVvdXQpO1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuYXV0b1JvdGF0ZUFmdGVyU3RpbGw7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICghaXNOYU4odGltZSkgJiYgdGltZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RpbGxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9yb3RhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIHRpbWUgKiAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF92ZWN0b3JEYW1waW5nOiBmdW5jdGlvbiAodiwgZGFtcGluZykge1xyXG4gICAgICAgIHZhciBzcGVlZCA9IHYubGVuKCk7XHJcbiAgICAgICAgc3BlZWQgPSBzcGVlZCAqIGRhbXBpbmc7XHJcbiAgICAgICAgaWYgKHNwZWVkIDwgMWUtNCkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHYubm9ybWFsaXplKCkuc2NhbGUoc3BlZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZVdvcmxkVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHZhciBmb3J3YXJkID0gdGhpcy50YXJnZXQud29ybGRUcmFuc2Zvcm0uejtcclxuICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLmFzaW4oZm9yd2FyZC55KTtcclxuICAgICAgICB2YXIgYmV0YSA9IE1hdGguYXRhbjIoZm9yd2FyZC54LCBmb3J3YXJkLnopO1xyXG5cclxuICAgICAgICB0aGlzLl90aGV0YSA9IGFscGhhO1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IC1iZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy50YXJnZXQucG9zaXRpb24uZGlzdCh0aGlzLl9jZW50ZXIpKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSl7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE9ydGhvU2l6ZSh0aGlzLnRhcmdldC50b3AgLSB0aGlzLnRhcmdldC5ib3R0b20pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlRG93bkhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeCA9IGUuY2xpZW50WDtcclxuICAgICAgICB2YXIgeSA9IGUuY2xpZW50WTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9tb2RlID0gJ3JvdGF0ZSc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnc3RhcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5yb3RhdGVNb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5wYW5Nb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncGFuJztcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFZlbmRvcnMgbGlrZSBNb3ppbGxhIHByb3ZpZGUgYSBtb3VzZS1kcml2ZW4gcGFubmluZyBmZWF0dXJlXHJcbiAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIGFjdGl2YXRlZCB3aGVuIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2V2ZW50LXR5cGUtbW91c2Vkb3duXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICAvLyBSZXNldCByb3RhdGUgdmVsb2NpdHlcclxuICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS5zZXQoMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcclxuICAgICAgICB0aGlzLl9tb3VzZVkgPSB5O1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG5cclxuICAgICAgICB2YXIgaGF2ZUdlc3R1cmU7XHJcbiAgICAgICAgLy8gVG91Y2hcclxuICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3VjaCA9IGUudGFyZ2V0VG91Y2hlc1swXTtcclxuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XHJcbiAgICAgICAgICAgIHkgPSB0b3VjaC5jbGllbnRZO1xyXG5cclxuICAgICAgICAgICAgaGF2ZUdlc3R1cmUgPSB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnY2hhbmdlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFuU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnBhblNlbnNpdGl2aXR5KTtcclxuICAgICAgICB2YXIgcm90YXRlU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnJvdGF0ZVNlbnNpdGl2aXR5KTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXZlR2VzdHVyZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnkgKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueCArPSAoeSAtIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX21vZGUgPT09ICdwYW4nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS54ICs9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHBhblNlbnNpdGl2aXR5WzBdICogNDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFuVmVsb2NpdHkueSArPSAoLXkgKyB0aGlzLl9tb3VzZVkpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHBhblNlbnNpdGl2aXR5WzFdICogNDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VXaGVlbEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBkZWx0YSA+IDAgPyAxIDogLTEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGluY2hIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fem9vbUhhbmRsZXIoZSwgZS5waW5jaFNjYWxlID4gMSA/IC0wLjQgOiAwLjQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfem9vbUhhbmRsZXI6IGZ1bmN0aW9uIChlLCBkZWx0YSkge1xyXG5cclxuICAgICAgICB2YXIgc3BlZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlIC0gdGhpcy5taW5EaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2UgLSB0aGlzLl9kaXN0YW5jZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX29ydGhvU2l6ZSAtIHRoaXMubWluT3J0aG9ncmFwaGljU2l6ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4T3J0aG9ncmFwaGljU2l6ZSAtIHRoaXMuX29ydGhvU2l6ZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkID0gKGRlbHRhID4gMCA/IC0xIDogMSkgKiBzcGVlZCAqIHRoaXMuem9vbVNlbnNpdGl2aXR5O1xyXG5cclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlICYmIHRoaXMuX21vZGUgPT09ICdyb3RhdGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVVwSGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShldmVudCwgJ2VuZCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBhbmltYXRvcnMgPSB0aGlzLl9hbmltYXRvcnM7XHJcbiAgICAgICAgYW5pbWF0b3JzLnB1c2goYW5pbWF0b3IpO1xyXG4gICAgICAgIGFuaW1hdG9yLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gYW5pbWF0b3JzLmluZGV4T2YoYW5pbWF0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbmltYXRvcjtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIF9wcm9jZXNzR2VzdHVyZTogZnVuY3Rpb24gKGV2ZW50LCBzdGFnZSkge1xyXG4gICAgICAgIHZhciBnZXN0dXJlTWdyID0gdGhpcy5fZ2VzdHVyZU1ncjtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdzdGFydCcgJiYgZ2VzdHVyZU1nci5jbGVhcigpO1xyXG5cclxuICAgICAgICB2YXIgZ2VzdHVyZUluZm8gPSBnZXN0dXJlTWdyLnJlY29nbml6ZShcclxuICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHN0YWdlID09PSAnZW5kJyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIC8vIERvIG5vdCBkbyBhbnkgcHJldmVudERlZmF1bHQgaGVyZS4gVXBwZXIgYXBwbGljYXRpb24gZG8gdGhhdCBpZiBuZWNlc3NhcnkuXHJcbiAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gZ2VzdHVyZUluZm8udHlwZTtcclxuICAgICAgICAgICAgZXZlbnQuZ2VzdHVyZUV2ZW50ID0gdHlwZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BpbmNoSGFuZGxlcihnZXN0dXJlSW5mby5ldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VzdHVyZUluZm87XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIElmIGF1dG8gcm90YXRlIHRoZSB0YXJnZXRcclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBkZWZhdWx0IGZhbHNlXHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT3JiaXRDb250cm9sLnByb3RvdHlwZSwgJ2F1dG9Sb3RhdGUnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1JvdGF0ZTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICB0aGlzLl9hdXRvUm90YXRlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gdmFsO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAndGFyZ2V0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICBpZiAodmFsICYmIHZhbC50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDZW50ZXIodmFsLnRhcmdldC50b0FycmF5KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3JiaXRDb250cm9sO1xyXG4iLCIvKipcclxuICogU3RhdGljR2VvbWV0cnkgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgdGhleSd2ZSBiZWVuIHNldHVwXHJcbiAqL1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGF0aWNHZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqL1xyXG52YXIgU3RhdGljR2VvbWV0cnkgPSBHZW9tZXRyeS5leHRlbmQoe1xyXG4gICAgZHluYW1pYzogZmFsc2VcclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IFN0YXRpY0dlb21ldHJ5O1xyXG4iLCIvLyBUT0RPIHRlc3RcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBOb2RlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkudXRpbC5tZXNoXHJcbiAqL1xyXG52YXIgbWVzaFV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIE1lcmdlIG11bHRpcGxlIG1lc2hlcyB0byBvbmUuXHJcbiAgICAgKiBOb3RlIHRoYXQgdGhlc2UgbWVzaGVzIG11c3QgaGF2ZSB0aGUgc2FtZSBtYXRlcmlhbFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPGNsYXkuTWVzaD59IG1lc2hlc1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhcHBseVdvcmxkVHJhbnNmb3JtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChtZXNoZXMsIGFwcGx5V29ybGRUcmFuc2Zvcm0pIHtcclxuXHJcbiAgICAgICAgaWYgKCEgbWVzaGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcGxhdGVNZXNoID0gbWVzaGVzWzBdO1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZUdlbyA9IHRlbXBsYXRlTWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0ZW1wbGF0ZU1lc2gubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVzID0gdGVtcGxhdGVHZW8uZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0ciA9IHRlbXBsYXRlR2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIC8vIEV4dGVuZCBjdXN0b20gYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyLmNsb25lKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2VNYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IGRhdGEgYW5kIG1lcmdlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICB2YXIgbkZhY2UgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzaGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaGVzW2tdLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudEdlby5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEdlby5ib3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybShhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaGVzW2tdLndvcmxkVHJhbnNmb3JtIDogbWVzaGVzW2tdLmxvY2FsVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94LnVuaW9uKGN1cnJlbnRHZW8uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5WZXJ0ZXggKz0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgbkZhY2UgKz0gY3VycmVudEdlby50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbbl07XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBhdHRyaWIuaW5pdChuVmVydGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5WZXJ0ZXggPj0gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdXNlSW5kaWNlcyA9IHRlbXBsYXRlR2VvLmlzVXNlSW5kaWNlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBtbSA9IDA7IG1tIDwgbWVzaGVzLmxlbmd0aDsgbW0rKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IG1lc2hlc1ttbV07XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaC5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4ID0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSBhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaC53b3JsZFRyYW5zZm9ybS5hcnJheSA6IG1lc2gubG9jYWxUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgbm4gPSAwOyBubiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbm4rKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tubl07XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEF0dHIgPSBjdXJyZW50R2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1bnVzZWQgYXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudEF0dHIudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gY3VycmVudEF0dHIudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBjdXJyZW50QXR0ci5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZlcnRleE9mZnNldCAqIHNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBsZW4gLyBzaXplO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEF0dHIudmFsdWVbb2Zmc2V0ICsgaV0gPSBjdXJyZW50QXR0ci52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwb3NpdGlvbiwgbm9ybWFsIGFuZCB0YW5nZW50XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3Bvc2l0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnbm9ybWFsJyB8fCBuYW1lID09PSAndGFuZ2VudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmZvckVhY2godGFyZ2V0QXR0ci52YWx1ZSwgc2l6ZSwgb2Zmc2V0LCBjb3VudCwgdmVjMy50cmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZUluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50R2VvLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXNbaSArIGluZGljZXNPZmZzZXRdID0gY3VycmVudEdlby5pbmRpY2VzW2ldICsgdmVydGV4T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc09mZnNldCArPSBsZW47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBuVmVydGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGxpdCBtZXNoIGludG8gc3ViIG1lc2hlcywgZWFjaCBtZXNoIHdpbGwgaGF2ZSBtYXhKb2ludE51bWJlciBqb2ludHMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWVzaH0gbWVzaFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heEpvaW50TnVtYmVyXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluUGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG5cclxuICAgIC8vIEZJWE1FLCBIYXZlIGlzc3VlcyBvbiBzb21lIG1vZGVsc1xyXG4gICAgc3BsaXRCeUpvaW50czogZnVuY3Rpb24gKG1lc2gsIG1heEpvaW50TnVtYmVyLCBpblBsYWNlKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBtZXNoLnNrZWxldG9uO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGpvaW50cyA9IG1lc2guam9pbnRzO1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkgfHwgIXNrZWxldG9uIHx8ICFqb2ludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpvaW50cy5sZW5ndGggPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIHZhciBmYWNlTGVuID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcclxuICAgICAgICB2YXIgcmVzdCA9IGZhY2VMZW47XHJcbiAgICAgICAgdmFyIGlzRmFjZUFkZGVkID0gW107XHJcbiAgICAgICAgdmFyIGpvaW50VmFsdWVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhY2VMZW47IGkrKykge1xyXG4gICAgICAgICAgICBpc0ZhY2VBZGRlZFtpXSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRkZWRKb2ludElkeFBlckZhY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGJ1Y2tldHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGdldEpvaW50QnlJbmRleCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50c1tpZHhdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hpbGUgKHJlc3QgPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRUcmlhbmdsZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcCA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRzID0gW107XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VMZW47IGYrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmFjZUFkZGVkW2ZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FuQWRkVG9CdWNrZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFkZGVkTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBpbmRpY2VzW2YgKiAzICsgaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGpvaW50VmFsdWVzW2lkeCAqIDQgKyBqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViSm9pbnROdW1iZXIgPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID0gc3ViSm9pbnROdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50c1tzdWJKb2ludE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZEpvaW50SWR4UGVyRmFjZVthZGRlZE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWRkVG9CdWNrZXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhbkFkZFRvQnVja2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBvcGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGVkTnVtYmVyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2FkZGVkSm9pbnRJZHhQZXJGYWNlW2ldXSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YkpvaW50TnVtYmVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0VHJpYW5nbGVzLnB1c2goaW5kaWNlcy5zdWJhcnJheShmICogMywgKGYgKyAxKSAqIDMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGYWNlQWRkZWRbZl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3QtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBidWNrZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdHJpYW5nbGVzOiBidWNrZXRUcmlhbmdsZXMsXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldEpvaW50cy5tYXAoZ2V0Sm9pbnRCeUluZGV4KSxcclxuICAgICAgICAgICAgICAgIGpvaW50UmV2ZXJzZU1hcDogYnVja2V0Sm9pbnRSZXZlcnNlTWFwXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3QgPSBuZXcgTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciBhdHRyaWJOYW1lcyA9IGdlb21ldHJ5LmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIGF0dHJpYk5hbWVzLnNwbGljZShhdHRyaWJOYW1lcy5pbmRleE9mKCdqb2ludCcpLCAxKTtcclxuICAgICAgICAvLyBNYXAgZnJvbSBvbGQgdmVydGV4IGluZGV4IHRvIG5ldyB2ZXJ0ZXggaW5kZXhcclxuICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgYnVja2V0cy5sZW5ndGg7IGIrKykge1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0ID0gYnVja2V0c1tiXTtcclxuICAgICAgICAgICAgdmFyIGpvaW50UmV2ZXJzZU1hcCA9IGJ1Y2tldC5qb2ludFJldmVyc2VNYXA7XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IGJ1Y2tldC5qb2ludHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1YkdlbyA9IG5ldyBHZW9tZXRyeSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbbWVzaC5uYW1lLCBpXS5qb2luKCctJyksXHJcbiAgICAgICAgICAgICAgICAvLyBET04nVCBjbG9uZSBtYXRlcmlhbC5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBzdWJHZW8sXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbjogc2tlbGV0b24sXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldC5qb2ludHMuc2xpY2UoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleDIgPSBnZW9tZXRyeS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ291bnQgc3ViIGdlbyBudW1iZXJcclxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBidWNrZXQudHJpYW5nbGVzLmxlbmd0aDsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBmYWNlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgIHN1YkF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoblZlcnRleCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoICogMyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0cmlhbmdsZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdHJpYW5nbGVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmliTmFtZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJOYW1lID0gYXR0cmliTmFtZXNbYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmliID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmliLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJBdHRyaWIudmFsdWVbblZlcnRleCAqIHNpemUgKyBqXSA9IGF0dHJpYi52YWx1ZVtpZHggKiBzaXplICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbaWR4ICogNCArIGpdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IG5WZXJ0ZXggKiA0ICsgajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbb2Zmc2V0XSA9IGpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlc1tpbmRpY2VzT2Zmc2V0KytdID0gbmV3SW5kaWNlc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby51cGRhdGVCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5hZGQoc3ViTWVzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IG1lc2guY2hpbGRyZW4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5wb3NpdGlvbi5jb3B5KG1lc2gucG9zaXRpb24pO1xyXG4gICAgICAgIHJvb3Qucm90YXRpb24uY29weShtZXNoLnJvdGF0aW9uKTtcclxuICAgICAgICByb290LnNjYWxlLmNvcHkobWVzaC5zY2FsZSk7XHJcblxyXG4gICAgICAgIGlmIChpblBsYWNlKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXNoLmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gbWVzaC5nZXRQYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmUobWVzaCk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQuYWRkKHJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb290O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWVzaFV0aWw7XHJcbiIsImltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbnZhciBNRVRBID0ge1xyXG4gICAgdmVyc2lvbjogMS4wLFxyXG4gICAgdHlwZTogJ0dlb21ldHJ5JyxcclxuICAgIGdlbmVyYXRvcjogJ3V0aWwudHJhbnNmZXJhYmxlLnRvT2JqZWN0J1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudHJhbnNmZXJhYmxlXHJcbiAqL1xyXG52YXIgdHJhbnNmZXJhYmxlVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBnZW9tZXRyeSB0byBhIG9iamVjdCBjb250YWluaW5nIHRyYW5zZmVyYWJsZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tZXRyeSBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBzaGFsbG93IHdoZXRoZXIgc2hhbGxvdyBjb3B5XHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGRhdGEgOiBkYXRhLCBidWZmZXJzIDogYnVmZmVycyB9LCBidWZmZXJzIGlzIHRoZSB0cmFuc2ZlcmFibGUgbGlzdFxyXG4gICAgICovXHJcbiAgICB0b09iamVjdCA6IGZ1bmN0aW9uIChnZW9tZXRyeSwgc2hhbGxvdykge1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgICAgICBtZXRhZGF0YSA6IHV0aWwuZXh0ZW5kKHt9LCBNRVRBKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy90cmFuc2ZlcmFibGUgYnVmZmVyc1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcblxyXG4gICAgICAgIC8vZHluYW1pY1xyXG4gICAgICAgIGRhdGEuZHluYW1pYyA9IGdlb21ldHJ5LmR5bmFtaWM7XHJcblxyXG4gICAgICAgIC8vYm91bmRpbmcgYm94XHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIGRhdGEuYm91bmRpbmdCb3ggPSB7XHJcbiAgICAgICAgICAgICAgICBtaW4gOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4udG9BcnJheSgpLFxyXG4gICAgICAgICAgICAgICAgbWF4IDogZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnRvQXJyYXkoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9pbmRpY2VzXHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmluZGljZXMgJiYgZ2VvbWV0cnkuaW5kaWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRhdGEuaW5kaWNlcyA9IGNvcHlJZk5lY2Vzc2FyeShnZW9tZXRyeS5pbmRpY2VzLCBzaGFsbG93KTtcclxuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGRhdGEuaW5kaWNlcy5idWZmZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZGF0YS5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBnZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICAvL2lnbm9yZSBlbXB0eSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0ciAmJiBhdHRyLnZhbHVlICYmIGF0dHIudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHIgPSBkYXRhLmF0dHJpYnV0ZXNbcF0gPSBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChhdHRyLnZhbHVlLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGEgOiBkYXRhLFxyXG4gICAgICAgICAgICBidWZmZXJzIDogYnVmZmVyc1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwcm9kdWNlIGEgZ2VvbWV0cnkgZnJvbSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHRvT2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEByZXR1cm5zIHtHZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdG9HZW9tZXRyeSA6IGZ1bmN0aW9uIChvYmplY3QpIHtcclxuICAgICAgICBpZiAoIW9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdC5kYXRhICYmIG9iamVjdC5idWZmZXJzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVVdGlsLnRvR2VvbWV0cnkob2JqZWN0LmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW9iamVjdC5tZXRhZGF0YSB8fCBvYmplY3QubWV0YWRhdGEuZ2VuZXJhdG9yICE9PSBNRVRBLmdlbmVyYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1t1dGlsLnRyYW5zZmVyYWJsZS50b0dlb21ldHJ5XSB0aGUgb2JqZWN0IGlzIG5vdCBnZW5lcmF0ZWQgYnkgdXRpbC50cmFuc2ZlcmFibGUuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2Jhc2ljIG9wdGlvbnNcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgZHluYW1pYyA6IG9iamVjdC5keW5hbWljLFxyXG4gICAgICAgICAgICBpbmRpY2VzIDogb2JqZWN0LmluZGljZXNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5taW4pO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbmV3IFZlY3RvcjMoKS5zZXRBcnJheShvYmplY3QuYm91bmRpbmdCb3gubWF4KTtcclxuICAgICAgICAgICAgb3B0aW9ucy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveChtaW4sIG1heCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkob3B0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vYXR0cmlidXRlc1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gb2JqZWN0LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG9iamVjdC5hdHRyaWJ1dGVzW3BdO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1twXSA9IG5ldyBHZW9tZXRyeS5BdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnR5cGUsIGF0dHIuc2l6ZSwgYXR0ci5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gY29weUF0dHJpYnV0ZShhdHRyLCBzaGFsbG93KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWUgOiBhdHRyLm5hbWUsXHJcbiAgICAgICAgdHlwZSA6IGF0dHIudHlwZSxcclxuICAgICAgICBzaXplIDogYXR0ci5zaXplLFxyXG4gICAgICAgIHNlbWFudGljIDogYXR0ci5zZW1hbnRpYyxcclxuICAgICAgICB2YWx1ZSA6IGNvcHlJZk5lY2Vzc2FyeShhdHRyLnZhbHVlLCBzaGFsbG93KVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weUlmTmVjZXNzYXJ5KGFyciwgc2hhbGxvdykge1xyXG4gICAgaWYgKCFzaGFsbG93KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBhcnIuY29uc3RydWN0b3IoYXJyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdHJhbnNmZXJhYmxlVXRpbDtcclxuIiwiLyoqXHJcbiAqIEBuYW1lIGNsYXkudmVyc2lvblxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgJzEuMi4zJztcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkudnIuZGlzb3J0ZXIub3V0cHV0LnZlcnRleFxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueHksIDAuNSwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2Jsb2IvbWFzdGVyL3NyYy9jYXJkYm9hcmQtZGlzdG9ydGVyLmpzXHJcblxyXG4vLyBVc2Ugd2VidnIgbWF5IGhhdmUgc2NhbGUgcHJvYmxlbS5cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDBcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL3NlYXJjaD9xPVNDQUxFJnR5cGU9SXNzdWVzJnV0Zjg9JUUyJTlDJTkzXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQ3XHJcblxyXG5cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG5pbXBvcnQgb3V0cHV0RXNzbCBmcm9tICcuL291dHB1dC5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQob3V0cHV0RXNzbCk7XHJcblxyXG5mdW5jdGlvbiBsZXJwIChhLCBiLCB0KSB7XHJcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcclxufVxyXG5cclxudmFyIENhcmRib2FyZERpc3RvcnRlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLCAwLCAwLCAxXSxcclxuXHJcbiAgICAgICAgX21lc2g6IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjdWxsaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBXaHkgZGlzYWJsZSBkZXB0aE1hc2sgd2lsbCBiZSB3cm9uZ1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkudnIuZGlzb3J0ZXIub3V0cHV0LmZyYWdtZW50JylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2Zha2VDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNvdXJjZVRleHR1cmUpIHtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5tYXRlcmlhbC5zZXQoJ3RleHR1cmUnLCBzb3VyY2VUZXh0dXJlKTtcclxuXHJcbiAgICAgICAgLy8gRnVsbCBzaXplP1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHJlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzLl9tZXNoXSwgdGhpcy5fZmFrZUNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5zaGFkZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLnJlbmRlcihyZW5kZXJlci5nbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZUZyb21WUkRpc3BsYXk6IGZ1bmN0aW9uICh2ckRpc3BsYXkpIHtcclxuXHJcbiAgICAgICAgLy8gRklYTUVcclxuICAgICAgICBpZiAodnJEaXNwbGF5LmRldmljZUluZm9fKSB7XHJcbiAgICAgICAgICAgIC8vIEhhcmRjb2RlZCBtZXNoIHNpemVcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWVzaCgyMCwgMjAsIHZyRGlzcGxheS5kZXZpY2VJbmZvXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhbnQgZ2V0IHZyRGlzcGxheS5kZXZpY2VJbmZvXywgc2VlbXMgY29kZSBjaGFuZ2VkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlTWVzaDogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRldmljZUluZm8pIHtcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuX21lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xyXG4gICAgICAgIHRleGNvb3JkQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBsZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVUYW5BbmdsZXMoKTtcclxuICAgICAgICB2YXIgbm9MZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZU5vTGVuc1RhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVTY3JlZW5SZWN0KG5vTGVuc0ZydXN0dW0pO1xyXG4gICAgICAgIHZhciB2aWR4ID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG5cclxuICAgICAgICAvLyBWZXJ0aWNlc1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBpIC8gKHdpZHRoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8gKGhlaWdodCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBHcmlkIHBvaW50cyByZWd1bGFybHkgc3BhY2VkIGluIFN0cmVvU2NyZWVuLCBhbmQgYmFycmVsIGRpc3RvcnRlZCBpblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gdTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBsZXJwKGxlbnNGcnVzdHVtWzBdLCBsZW5zRnJ1c3R1bVsyXSwgdSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSBsZXJwKGxlbnNGcnVzdHVtWzNdLCBsZW5zRnJ1c3R1bVsxXSwgdik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBkZXZpY2VJbmZvLmRpc3RvcnRpb24uZGlzdG9ydEludmVyc2UoZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSB4ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB5ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdSA9IChwIC0gbm9MZW5zRnJ1c3R1bVswXSkgLyAobm9MZW5zRnJ1c3R1bVsyXSAtIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAocSAtIG5vTGVuc0ZydXN0dW1bM10pIC8gKG5vTGVuc0ZydXN0dW1bMV0gLSBub0xlbnNGcnVzdHVtWzNdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB1LHYgdG8gbWVzaCBzY3JlZW4gY29vcmRpbmF0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IGRldmljZUluZm8uZGV2aWNlLndpZHRoTWV0ZXJzIC8gZGV2aWNlSW5mby5kZXZpY2UuaGVpZ2h0TWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9yaWdpbmFsIFVuaXR5IHBsdWdpbiBtdWx0aXBsaWVkIFUgYnkgdGhlIGFzcGVjdCByYXRpb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkaWRuJ3QgbXVsdGlwbHkgZWl0aGVyIHZhbHVlIGJ5IDIsIGJ1dCB0aGF0IHNlZW1zIHRvIGdldCBpdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWxseSBjbG9zZSB0byBjb3JyZWN0IGxvb2tpbmcgZm9yIG1lLiBJIGhhdGUgdGhpcyBraW5kIG9mIFwiRG9uJ3RcclxuICAgICAgICAgICAgICAgICAgICAvLyBrbm93IHdoeSBpdCB3b3Jrc1wiIGNvZGUgdGhvdWdoLCBhbmQgd29sZCBsb3ZlIGEgbW9yZSBsb2dpY2FsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGFuYXRpb24gb2Ygd2hhdCBuZWVkcyB0byBoYXBwZW4gaGVyZS5cclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHZpZXdwb3J0LnggKyB1ICogdmlld3BvcnQud2lkdGggLSAwLjUpICogMi4wOyAvLyogYXNwZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAodmlld3BvcnQueSArIHYgKiB2aWV3cG9ydC5oZWlnaHQgLSAwLjUpICogMi4wO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwb3NbMF0gPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc1sxXSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzJdID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXZbMF0gPSBzICogMC41ICsgZSAqIDAuNTtcclxuICAgICAgICAgICAgICAgICAgICB1dlsxXSA9IHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQodmlkeCwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KHZpZHgsIHV2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHcgPSBsZW5zRnJ1c3R1bVsyXSAtIGxlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVswXSA9IC0odyArIGxlbnNGcnVzdHVtWzBdKTtcclxuICAgICAgICAgICAgbGVuc0ZydXN0dW1bMl0gPSB3IC0gbGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHcgPSBub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXTtcclxuICAgICAgICAgICAgbm9MZW5zRnJ1c3R1bVswXSA9IC0odyArIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzJdID0gdyAtIG5vTGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHZpZXdwb3J0LnggPSAxIC0gKHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbmRpY2VzXHJcbiAgICAgICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMiAqICh3aWR0aCAtIDEpICogKGhlaWdodCAtIDEpICogNik7XHJcbiAgICAgICAgdmFyIGhhbGZ3aWR0aCA9IHdpZHRoIC8gMjtcclxuICAgICAgICB2YXIgaGFsZmhlaWdodCA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG4gICAgICAgIHZhciBpaWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IDI7IGUrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRoOyBpKyssIHZpZHgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGogPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgcXVhZC4gIExvd2VyIHJpZ2h0IGFuZCB1cHBlciBsZWZ0IHF1YWRyYW50cyBoYXZlIHF1YWRzIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdHJpYW5nbGUgZGlhZ29uYWwgZmxpcHBlZCB0byBnZXQgdGhlIHZpZ25ldHRlIHRvIGludGVycG9sYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdGx5LlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoaSA8PSBoYWxmd2lkdGgpID09IChqIDw9IGhhbGZoZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgbG93ZXIgbGVmdCB0byB1cHBlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuaW5kaWNlcyA9IGluZGljZXM7XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYXJkYm9hcmREaXN0b3J0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgdG1wUHJvamVjdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG52YXIgU3RlcmVvQ2FtZXJhID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgYXNwZWN0OiAwLjUsXHJcblxyXG4gICAgICAgIF9sZWZ0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9yaWdodENhbWVyYTogbmV3IENhbWVyYSgpLFxyXG5cclxuICAgICAgICBfZXllTGVmdDogbmV3IE1hdHJpeDQoKSxcclxuICAgICAgICBfZXllUmlnaHQ6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIF9mcmFtZURhdGE6IG51bGxcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVGcm9tQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhLCBmb2N1cywgem9vbSwgZXllU2VwKSB7XHJcbiAgICAgICAgaWYgKGNhbWVyYS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvY3VzID0gZm9jdXMgPT0gbnVsbCA/IDEwIDogZm9jdXM7XHJcbiAgICAgICAgem9vbSA9IHpvb20gPT0gbnVsbCA/IDEgOiB6b29tO1xyXG4gICAgICAgIGV5ZVNlcCA9IGV5ZVNlcCA9PSBudWxsID8gMC4wNjQgOiBleWVTZXA7XHJcblxyXG4gICAgICAgIHZhciBmb3YgPSBjYW1lcmEuZm92O1xyXG4gICAgICAgIHZhciBhc3BlY3QgPSBjYW1lcmEuYXNwZWN0ICogdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgdmFyIG5lYXIgPSBjYW1lcmEubmVhcjtcclxuXHJcbiAgICAgICAgLy8gT2ZmLWF4aXMgc3RlcmVvc2NvcGljIGVmZmVjdCBiYXNlZCBvblxyXG4gICAgICAgIC8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9zdGVyZW9ncmFwaGljcy9zdGVyZW9yZW5kZXIvXHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdmFyIGV5ZVNlcCA9IGV5ZVNlcCAvIDI7XHJcbiAgICAgICAgdmFyIGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcCAqIG5lYXIgLyBmb2N1cztcclxuICAgICAgICB2YXIgeW1heCA9IChuZWFyICogTWF0aC50YW4oTWF0aC5QSSAvIDE4MCAqIGZvdiAqIDAuNSApICkgLyB6b29tO1xyXG4gICAgICAgIHZhciB4bWluLCB4bWF4O1xyXG5cclxuICAgICAgICAvLyB0cmFuc2xhdGUgeE9mZnNldFxyXG4gICAgICAgIHRoaXMuX2V5ZUxlZnQuYXJyYXlbMTJdID0gLSBleWVTZXA7XHJcbiAgICAgICAgdGhpcy5fZXllUmlnaHQuYXJyYXlbMTJdID0gZXllU2VwO1xyXG5cclxuICAgICAgICAvLyBmb3IgbGVmdCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRtcFByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyBmb3IgcmlnaHQgZXllXHJcbiAgICAgICAgeG1pbiA9IC0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVswXSA9IDIgKiBuZWFyIC8gKHhtYXggLSB4bWluKTtcclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzhdID0gKHhtYXggKyB4bWluICkgLyAoeG1heCAtIHhtaW4pO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllTGVmdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtXHJcbiAgICAgICAgICAgIC5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLm11bHRpcGx5KHRoaXMuX2V5ZVJpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSwgcGFyZW50Tm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIFZSRnJhbWVEYXRhID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZnJhbWVEYXRhID0gdGhpcy5fZnJhbWVEYXRhIHx8ICh0aGlzLl9mcmFtZURhdGEgPSBuZXcgVlJGcmFtZURhdGEoKSk7XHJcbiAgICAgICAgdnJEaXNwbGF5LmdldEZyYW1lRGF0YShmcmFtZURhdGEpO1xyXG4gICAgICAgIHZhciBsZWZ0Q2FtZXJhID0gdGhpcy5fbGVmdENhbWVyYTtcclxuICAgICAgICB2YXIgcmlnaHRDYW1lcmEgPSB0aGlzLl9yaWdodENhbWVyYTtcclxuXHJcbiAgICAgICAgbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS52aWV3TWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5zZXRWaWV3TWF0cml4KGxlZnRDYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuc2V0Vmlld01hdHJpeChyaWdodENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgdHJhbnNmb3JtIGlzIG5vdCB1cGRhdGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGxlZnRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0ubXVsdGlwbHlMZWZ0KHBhcmVudE5vZGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGVmdENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRSaWdodENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yaWdodENhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGVyZW9DYW1lcmE7XHJcbiIsIi8qKiBAbmFtZXNwYWNlIGNsYXkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5tYXRoICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYXN5bmMgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jYW1lcmEgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb21wb3NpdG9yICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuY29yZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lmdlb21ldHJ5ICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuaGVscGVyICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkubGlnaHQgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5sb2FkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5wYXJ0aWNsZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBsdWdpbiAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnByZVBhc3MgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS50ZXh0dXJlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkudXRpbCAqL1xyXG5cclxuaW1wb3J0IEFuaW1hdG9yJDAgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5pbXBvcnQgQmxlbmQxRENsaXAkMSBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDFEQ2xpcCc7XHJcbmltcG9ydCBCbGVuZDJEQ2xpcCQyIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMkRDbGlwJztcclxuaW1wb3J0IENsaXAkMyBmcm9tICcuL2FuaW1hdGlvbi9DbGlwJztcclxuaW1wb3J0IGVhc2luZyQ0IGZyb20gJy4vYW5pbWF0aW9uL2Vhc2luZyc7XHJcbmltcG9ydCBTYW1wbGVyVHJhY2skNSBmcm9tICcuL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5pbXBvcnQgVGltZWxpbmUkNiBmcm9tICcuL2FuaW1hdGlvbi9UaW1lbGluZSc7XHJcbmltcG9ydCBUcmFja0NsaXAkNyBmcm9tICcuL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgYXBwbGljYXRpb24kOCBmcm9tICcuL2FwcGxpY2F0aW9uJztcclxuaW1wb3J0IFRhc2skOSBmcm9tICcuL2FzeW5jL1Rhc2snO1xyXG5pbXBvcnQgVGFza0dyb3VwJDEwIGZyb20gJy4vYXN5bmMvVGFza0dyb3VwJztcclxuaW1wb3J0IENhbWVyYSQxMSBmcm9tICcuL0NhbWVyYSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWMkMTIgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlJDEzIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IENvbXBvc2l0b3IkMTQgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUkMTUgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IkMTYgZnJvbSAnLi9jb21wb3NpdG9yL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgRmlsdGVyTm9kZSQxNyBmcm9tICcuL2NvbXBvc2l0b3IvRmlsdGVyTm9kZSc7XHJcbmltcG9ydCBHcmFwaCQxOCBmcm9tICcuL2NvbXBvc2l0b3IvR3JhcGgnO1xyXG5pbXBvcnQgUGFzcyQxOSBmcm9tICcuL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBTY2VuZU5vZGUkMjAgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlTm9kZSQyMSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wkMjIgZnJvbSAnLi9jb21wb3NpdG9yL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEJhc2UkMjMgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgQ2FjaGUkMjQgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IGNvbG9yJDI1IGZyb20gJy4vY29yZS9jb2xvcic7XHJcbmltcG9ydCBnbGVudW0kMjYgZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBHTEluZm8kMjcgZnJvbSAnLi9jb3JlL0dMSW5mbyc7XHJcbmltcG9ydCBMaW5rZWRMaXN0JDI4IGZyb20gJy4vY29yZS9MaW5rZWRMaXN0JztcclxuaW1wb3J0IExSVSQyOSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IGV4dGVuZCQzMCBmcm9tICcuL2NvcmUvbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyJDMxIGZyb20gJy4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCByZXF1ZXN0JDMyIGZyb20gJy4vY29yZS9yZXF1ZXN0JztcclxuaW1wb3J0IHV0aWwkMzMgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yJDM0IGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQzNSBmcm9tICcuL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgR0J1ZmZlciQzNiBmcm9tICcuL2RlZmVycmVkL0dCdWZmZXInO1xyXG5pbXBvcnQgUmVuZGVyZXIkMzcgZnJvbSAnLi9kZWZlcnJlZC9SZW5kZXJlcic7XHJcbmltcG9ydCBnbG1hdHJpeCQzOCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciQzOSBmcm9tICcuL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IEdlb21ldHJ5JDQwIGZyb20gJy4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQ29uZSQ0MSBmcm9tICcuL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3ViZSQ0MiBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXIkNDMgZnJvbSAnLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBQYXJhbWV0cmljU3VyZmFjZSQ0NCBmcm9tICcuL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlJztcclxuaW1wb3J0IFBsYW5lJDQ1IGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU3BoZXJlJDQ2IGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IEdlb21ldHJ5QmFzZSQ0NyBmcm9tICcuL0dlb21ldHJ5QmFzZSc7XHJcbmltcG9ydCBKb2ludCQ0OCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IExpZ2h0JDQ5IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQW1iaWVudCQ1MCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXAkNTEgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0gkNTIgZnJvbSAnLi9saWdodC9BbWJpZW50U0gnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWwkNTMgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludCQ1NCBmcm9tICcuL2xpZ2h0L1BvaW50JztcclxuaW1wb3J0IFNwaGVyZSQ1NSBmcm9tICcuL2xpZ2h0L1NwaGVyZSc7XHJcbmltcG9ydCBTcG90JDU2IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBUdWJlJDU3IGZyb20gJy4vbGlnaHQvVHViZSc7XHJcbmltcG9ydCBGWCQ1OCBmcm9tICcuL2xvYWRlci9GWCc7XHJcbmltcG9ydCBHTFRGJDU5IGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTWF0ZXJpYWwkNjAgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCQ2MSBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSQ2MiBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBNYXRyaXgyJDYzIGZyb20gJy4vbWF0aC9NYXRyaXgyJztcclxuaW1wb3J0IE1hdHJpeDJkJDY0IGZyb20gJy4vbWF0aC9NYXRyaXgyZCc7XHJcbmltcG9ydCBNYXRyaXgzJDY1IGZyb20gJy4vbWF0aC9NYXRyaXgzJztcclxuaW1wb3J0IE1hdHJpeDQkNjYgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUGxhbmUkNjcgZnJvbSAnLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFF1YXRlcm5pb24kNjggZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgUmF5JDY5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5pbXBvcnQgdXRpbCQ3MCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCBWYWx1ZSQ3MSBmcm9tICcuL21hdGgvVmFsdWUnO1xyXG5pbXBvcnQgVmVjdG9yMiQ3MiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzJDczIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjQkNzQgZnJvbSAnLi9tYXRoL1ZlY3RvcjQnO1xyXG5pbXBvcnQgTWVzaCQ3NSBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTm9kZSQ3NiBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRW1pdHRlciQ3NyBmcm9tICcuL3BhcnRpY2xlL0VtaXR0ZXInO1xyXG5pbXBvcnQgRmllbGQkNzggZnJvbSAnLi9wYXJ0aWNsZS9GaWVsZCc7XHJcbmltcG9ydCBGb3JjZUZpZWxkJDc5IGZyb20gJy4vcGFydGljbGUvRm9yY2VGaWVsZCc7XHJcbmltcG9ydCBQYXJ0aWNsZSQ4MCBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlJztcclxuaW1wb3J0IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MSBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBQaXhlbFBpY2tpbmckODIgZnJvbSAnLi9waWNraW5nL1BpeGVsUGlja2luZyc7XHJcbmltcG9ydCBSYXlQaWNraW5nJDgzIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IEZyZWVDb250cm9sJDg0IGZyb20gJy4vcGx1Z2luL0ZyZWVDb250cm9sJztcclxuaW1wb3J0IEdhbWVwYWRDb250cm9sJDg1IGZyb20gJy4vcGx1Z2luL0dhbWVwYWRDb250cm9sJztcclxuaW1wb3J0IEdlc3R1cmVNZ3IkODYgZnJvbSAnLi9wbHVnaW4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCBJbmZpbml0ZVBsYW5lJDg3IGZyb20gJy4vcGx1Z2luL0luZmluaXRlUGxhbmUnO1xyXG5pbXBvcnQgT3JiaXRDb250cm9sJDg4IGZyb20gJy4vcGx1Z2luL09yYml0Q29udHJvbCc7XHJcbmltcG9ydCBTa3lib3gkODkgZnJvbSAnLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUkOTAgZnJvbSAnLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcCQ5MSBmcm9tICcuL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2hhZG93TWFwJDkyIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSQ5MyBmcm9tICcuL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgUmVuZGVyZXIkOTQgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSQ5NSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFNoYWRlciQ5NiBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBsaWJyYXJ5JDk3IGZyb20gJy4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuaW1wb3J0IGxpZ2h0JDk5IGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5pbXBvcnQgU2tlbGV0b24kMTAwIGZyb20gJy4vU2tlbGV0b24nO1xyXG5pbXBvcnQgU3RhbmRhcmRNYXRlcmlhbCQxMDEgZnJvbSAnLi9TdGFuZGFyZE1hdGVyaWFsJztcclxuaW1wb3J0IFN0YXRpY0dlb21ldHJ5JDEwMiBmcm9tICcuL1N0YXRpY0dlb21ldHJ5JztcclxuaW1wb3J0IFRleHR1cmUkMTAzIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQkMTA0IGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlJDEwNSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuaW1wb3J0IFRpbWVsaW5lJDEwNiBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IGN1YmVtYXAkMTA3IGZyb20gJy4vdXRpbC9jdWJlbWFwJztcclxuaW1wb3J0IGRkcyQxMDggZnJvbSAnLi91dGlsL2Rkcyc7XHJcbmltcG9ydCBkZWxhdW5heSQxMDkgZnJvbSAnLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IGhkciQxMTAgZnJvbSAnLi91dGlsL2hkcic7XHJcbmltcG9ydCBtZXNoJDExMSBmcm9tICcuL3V0aWwvbWVzaCc7XHJcbmltcG9ydCBzaCQxMTIgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmUkMTEzIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHRyYW5zZmVyYWJsZSQxMTQgZnJvbSAnLi91dGlsL3RyYW5zZmVyYWJsZSc7XHJcbmltcG9ydCB2ZXJzaW9uJDExNSBmcm9tICcuL3ZlcnNpb24nO1xyXG5pbXBvcnQgQ2FyZGJvYXJkRGlzdG9ydGVyJDExNiBmcm9tICcuL3ZyL0NhcmRib2FyZERpc3RvcnRlcic7XHJcbmltcG9ydCBTdGVyZW9DYW1lcmEkMTE3IGZyb20gJy4vdnIvU3RlcmVvQ2FtZXJhJztcclxuXHJcblxyXG52YXIgYW5pbWF0aW9uID0ge1xyXG4gICAgQW5pbWF0b3IgOiBBbmltYXRvciQwLFxyXG4gICAgQmxlbmQxRENsaXAgOiBCbGVuZDFEQ2xpcCQxLFxyXG4gICAgQmxlbmQyRENsaXAgOiBCbGVuZDJEQ2xpcCQyLFxyXG4gICAgQ2xpcCA6IENsaXAkMyxcclxuICAgIGVhc2luZyA6IGVhc2luZyQ0LFxyXG4gICAgU2FtcGxlclRyYWNrIDogU2FtcGxlclRyYWNrJDUsXHJcbiAgICBUaW1lbGluZSA6IFRpbWVsaW5lJDYsXHJcbiAgICBUcmFja0NsaXAgOiBUcmFja0NsaXAkN1xyXG59O1xyXG5leHBvcnQgeyBhbmltYXRpb24gfTtcclxuXHJcbmV4cG9ydCB7IGFwcGxpY2F0aW9uJDggYXMgYXBwbGljYXRpb24gfTtcclxuXHJcbnZhciBhc3luYyA9IHtcclxuICAgIFRhc2sgOiBUYXNrJDksXHJcbiAgICBUYXNrR3JvdXAgOiBUYXNrR3JvdXAkMTBcclxufTtcclxuZXhwb3J0IHsgYXN5bmMgfTtcclxuXHJcbmV4cG9ydCB7IENhbWVyYSQxMSBhcyBDYW1lcmEgfTtcclxuXHJcbnZhciBjYW1lcmEgPSB7XHJcbiAgICBPcnRob2dyYXBoaWMgOiBPcnRob2dyYXBoaWMkMTIsXHJcbiAgICBQZXJzcGVjdGl2ZSA6IFBlcnNwZWN0aXZlJDEzXHJcbn07XHJcbmV4cG9ydCB7IGNhbWVyYSB9O1xyXG5cclxuXHJcbnZhciBjb21wb3NpdG9yID0ge1xyXG4gICAgQ29tcG9zaXRvciA6IENvbXBvc2l0b3IkMTQsXHJcbiAgICBDb21wb3NpdG9yTm9kZSA6IENvbXBvc2l0b3JOb2RlJDE1LFxyXG4gICAgY3JlYXRlQ29tcG9zaXRvciA6IGNyZWF0ZUNvbXBvc2l0b3IkMTYsXHJcbiAgICBGaWx0ZXJOb2RlIDogRmlsdGVyTm9kZSQxNyxcclxuICAgIEdyYXBoIDogR3JhcGgkMTgsXHJcbiAgICBQYXNzIDogUGFzcyQxOSxcclxuICAgIFNjZW5lTm9kZSA6IFNjZW5lTm9kZSQyMCxcclxuICAgIFRleHR1cmVOb2RlIDogVGV4dHVyZU5vZGUkMjEsXHJcbiAgICBUZXh0dXJlUG9vbCA6IFRleHR1cmVQb29sJDIyXHJcbn07XHJcbmV4cG9ydCB7IGNvbXBvc2l0b3IgfTtcclxuXHJcblxyXG52YXIgY29yZSA9IHtcclxuICAgIEJhc2UgOiBCYXNlJDIzLFxyXG4gICAgQ2FjaGUgOiBDYWNoZSQyNCxcclxuICAgIGNvbG9yIDogY29sb3IkMjUsXHJcbiAgICBnbGVudW0gOiBnbGVudW0kMjYsXHJcbiAgICBHTEluZm8gOiBHTEluZm8kMjcsXHJcbiAgICBMaW5rZWRMaXN0IDogTGlua2VkTGlzdCQyOCxcclxuICAgIExSVSA6IExSVSQyOSxcclxuICAgIG1peGluIDoge1xyXG4gICAgICAgIGV4dGVuZCA6IGV4dGVuZCQzMCxcclxuICAgICAgICBub3RpZmllciA6IG5vdGlmaWVyJDMxXHJcbiAgICB9LFxyXG4gICAgcmVxdWVzdCA6IHJlcXVlc3QkMzIsXHJcbiAgICB1dGlsIDogdXRpbCQzMyxcclxuICAgIHZlbmRvciA6IHZlbmRvciQzNFxyXG59O1xyXG5leHBvcnQgeyBjb3JlIH07XHJcblxyXG5leHBvcnQgeyBjcmVhdGVDb21wb3NpdG9yJDM1IGFzIGNyZWF0ZUNvbXBvc2l0b3IgfTtcclxuXHJcbnZhciBkZWZlcnJlZCA9IHtcclxuICAgIEdCdWZmZXIgOiBHQnVmZmVyJDM2LFxyXG4gICAgUmVuZGVyZXIgOiBSZW5kZXJlciQzN1xyXG59O1xyXG5leHBvcnQgeyBkZWZlcnJlZCB9O1xyXG5cclxuXHJcbnZhciBkZXAgPSB7XHJcbiAgICBnbG1hdHJpeCA6IGdsbWF0cml4JDM4XHJcbn07XHJcbmV4cG9ydCB7IGRlcCB9O1xyXG5cclxuZXhwb3J0IHsgRnJhbWVCdWZmZXIkMzkgYXMgRnJhbWVCdWZmZXIgfTtcclxuZXhwb3J0IHsgR2VvbWV0cnkkNDAgYXMgR2VvbWV0cnkgfTtcclxuXHJcbnZhciBnZW9tZXRyeSA9IHtcclxuICAgIENvbmUgOiBDb25lJDQxLFxyXG4gICAgQ3ViZSA6IEN1YmUkNDIsXHJcbiAgICBDeWxpbmRlciA6IEN5bGluZGVyJDQzLFxyXG4gICAgUGFyYW1ldHJpY1N1cmZhY2UgOiBQYXJhbWV0cmljU3VyZmFjZSQ0NCxcclxuICAgIFBsYW5lIDogUGxhbmUkNDUsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNDZcclxufTtcclxuZXhwb3J0IHsgZ2VvbWV0cnkgfTtcclxuXHJcbmV4cG9ydCB7IEdlb21ldHJ5QmFzZSQ0NyBhcyBHZW9tZXRyeUJhc2UgfTtcclxuZXhwb3J0IHsgSm9pbnQkNDggYXMgSm9pbnQgfTtcclxuZXhwb3J0IHsgTGlnaHQkNDkgYXMgTGlnaHQgfTtcclxuXHJcbnZhciBsaWdodCA9IHtcclxuICAgIEFtYmllbnQgOiBBbWJpZW50JDUwLFxyXG4gICAgQW1iaWVudEN1YmVtYXAgOiBBbWJpZW50Q3ViZW1hcCQ1MSxcclxuICAgIEFtYmllbnRTSCA6IEFtYmllbnRTSCQ1MixcclxuICAgIERpcmVjdGlvbmFsIDogRGlyZWN0aW9uYWwkNTMsXHJcbiAgICBQb2ludCA6IFBvaW50JDU0LFxyXG4gICAgU3BoZXJlIDogU3BoZXJlJDU1LFxyXG4gICAgU3BvdCA6IFNwb3QkNTYsXHJcbiAgICBUdWJlIDogVHViZSQ1N1xyXG59O1xyXG5leHBvcnQgeyBsaWdodCB9O1xyXG5cclxuXHJcbnZhciBsb2FkZXIgPSB7XHJcbiAgICBGWCA6IEZYJDU4LFxyXG4gICAgR0xURiA6IEdMVEYkNTlcclxufTtcclxuZXhwb3J0IHsgbG9hZGVyIH07XHJcblxyXG5leHBvcnQgeyBNYXRlcmlhbCQ2MCBhcyBNYXRlcmlhbCB9O1xyXG5cclxudmFyIG1hdGggPSB7XHJcbiAgICBCb3VuZGluZ0JveCA6IEJvdW5kaW5nQm94JDYxLFxyXG4gICAgRnJ1c3R1bSA6IEZydXN0dW0kNjIsXHJcbiAgICBNYXRyaXgyIDogTWF0cml4MiQ2MyxcclxuICAgIE1hdHJpeDJkIDogTWF0cml4MmQkNjQsXHJcbiAgICBNYXRyaXgzIDogTWF0cml4MyQ2NSxcclxuICAgIE1hdHJpeDQgOiBNYXRyaXg0JDY2LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ2NyxcclxuICAgIFF1YXRlcm5pb24gOiBRdWF0ZXJuaW9uJDY4LFxyXG4gICAgUmF5IDogUmF5JDY5LFxyXG4gICAgdXRpbCA6IHV0aWwkNzAsXHJcbiAgICBWYWx1ZSA6IFZhbHVlJDcxLFxyXG4gICAgVmVjdG9yMiA6IFZlY3RvcjIkNzIsXHJcbiAgICBWZWN0b3IzIDogVmVjdG9yMyQ3MyxcclxuICAgIFZlY3RvcjQgOiBWZWN0b3I0JDc0XHJcbn07XHJcbmV4cG9ydCB7IG1hdGggfTtcclxuZXhwb3J0IHsgQm91bmRpbmdCb3gkNjEgYXMgQm91bmRpbmdCb3ggfTtcclxuZXhwb3J0IHsgRnJ1c3R1bSQ2MiBhcyBGcnVzdHVtIH07XHJcbmV4cG9ydCB7IE1hdHJpeDIkNjMgYXMgTWF0cml4MiB9O1xyXG5leHBvcnQgeyBNYXRyaXgyZCQ2NCBhcyBNYXRyaXgyZCB9O1xyXG5leHBvcnQgeyBNYXRyaXgzJDY1IGFzIE1hdHJpeDMgfTtcclxuZXhwb3J0IHsgTWF0cml4NCQ2NiBhcyBNYXRyaXg0IH07XHJcbmV4cG9ydCB7IFBsYW5lJDY3IGFzIFBsYW5lIH07XHJcbmV4cG9ydCB7IFF1YXRlcm5pb24kNjggYXMgUXVhdGVybmlvbiB9O1xyXG5leHBvcnQgeyBSYXkkNjkgYXMgUmF5IH07XHJcbmV4cG9ydCB7IFZhbHVlJDcxIGFzIFZhbHVlIH07XHJcbmV4cG9ydCB7IFZlY3RvcjIkNzIgYXMgVmVjdG9yMiB9O1xyXG5leHBvcnQgeyBWZWN0b3IzJDczIGFzIFZlY3RvcjMgfTtcclxuZXhwb3J0IHsgVmVjdG9yNCQ3NCBhcyBWZWN0b3I0IH07XHJcblxyXG5leHBvcnQgeyBNZXNoJDc1IGFzIE1lc2ggfTtcclxuZXhwb3J0IHsgTm9kZSQ3NiBhcyBOb2RlIH07XHJcblxyXG52YXIgcGFydGljbGUgPSB7XHJcbiAgICBFbWl0dGVyIDogRW1pdHRlciQ3NyxcclxuICAgIEZpZWxkIDogRmllbGQkNzgsXHJcbiAgICBGb3JjZUZpZWxkIDogRm9yY2VGaWVsZCQ3OSxcclxuICAgIFBhcnRpY2xlIDogUGFydGljbGUkODAsXHJcbiAgICBQYXJ0aWNsZVJlbmRlcmFibGUgOiBQYXJ0aWNsZVJlbmRlcmFibGUkODFcclxufTtcclxuZXhwb3J0IHsgcGFydGljbGUgfTtcclxuXHJcblxyXG52YXIgcGlja2luZyA9IHtcclxuICAgIFBpeGVsUGlja2luZyA6IFBpeGVsUGlja2luZyQ4MixcclxuICAgIFJheVBpY2tpbmcgOiBSYXlQaWNraW5nJDgzXHJcbn07XHJcbmV4cG9ydCB7IHBpY2tpbmcgfTtcclxuXHJcblxyXG52YXIgcGx1Z2luID0ge1xyXG4gICAgRnJlZUNvbnRyb2wgOiBGcmVlQ29udHJvbCQ4NCxcclxuICAgIEdhbWVwYWRDb250cm9sIDogR2FtZXBhZENvbnRyb2wkODUsXHJcbiAgICBHZXN0dXJlTWdyIDogR2VzdHVyZU1nciQ4NixcclxuICAgIEluZmluaXRlUGxhbmUgOiBJbmZpbml0ZVBsYW5lJDg3LFxyXG4gICAgT3JiaXRDb250cm9sIDogT3JiaXRDb250cm9sJDg4LFxyXG4gICAgU2t5Ym94IDogU2t5Ym94JDg5LFxyXG4gICAgU2t5ZG9tZSA6IFNreWRvbWUkOTBcclxufTtcclxuZXhwb3J0IHsgcGx1Z2luIH07XHJcblxyXG5cclxudmFyIHByZVBhc3MgPSB7XHJcbiAgICBFbnZpcm9ubWVudE1hcCA6IEVudmlyb25tZW50TWFwJDkxLFxyXG4gICAgU2hhZG93TWFwIDogU2hhZG93TWFwJDkyXHJcbn07XHJcbmV4cG9ydCB7IHByZVBhc3MgfTtcclxuXHJcbmV4cG9ydCB7IFJlbmRlcmFibGUkOTMgYXMgUmVuZGVyYWJsZSB9O1xyXG5leHBvcnQgeyBSZW5kZXJlciQ5NCBhcyBSZW5kZXJlciB9O1xyXG5leHBvcnQgeyBTY2VuZSQ5NSBhcyBTY2VuZSB9O1xyXG5leHBvcnQgeyBTaGFkZXIkOTYgYXMgU2hhZGVyIH07XHJcblxyXG52YXIgc2hhZGVyID0ge1xyXG4gICAgbGlicmFyeSA6IGxpYnJhcnkkOTcsXHJcbiAgICByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIDogcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCxcclxuICAgIHNvdXJjZSA6IHtcclxuICAgIGhlYWRlciA6IHtcclxuICAgICAgICBsaWdodCA6IGxpZ2h0JDk5XHJcbiAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB7IHNoYWRlciB9O1xyXG5cclxuZXhwb3J0IHsgU2tlbGV0b24kMTAwIGFzIFNrZWxldG9uIH07XHJcbmV4cG9ydCB7IFN0YW5kYXJkTWF0ZXJpYWwkMTAxIGFzIFN0YW5kYXJkTWF0ZXJpYWwgfTtcclxuZXhwb3J0IHsgU3RhdGljR2VvbWV0cnkkMTAyIGFzIFN0YXRpY0dlb21ldHJ5IH07XHJcbmV4cG9ydCB7IFRleHR1cmUkMTAzIGFzIFRleHR1cmUgfTtcclxuZXhwb3J0IHsgVGV4dHVyZTJEJDEwNCBhcyBUZXh0dXJlMkQgfTtcclxuZXhwb3J0IHsgVGV4dHVyZUN1YmUkMTA1IGFzIFRleHR1cmVDdWJlIH07XHJcbmV4cG9ydCB7IFRpbWVsaW5lJDEwNiBhcyBUaW1lbGluZSB9O1xyXG5cclxudmFyIHV0aWwgPSB7XHJcbiAgICBjdWJlbWFwIDogY3ViZW1hcCQxMDcsXHJcbiAgICBkZHMgOiBkZHMkMTA4LFxyXG4gICAgZGVsYXVuYXkgOiBkZWxhdW5heSQxMDksXHJcbiAgICBoZHIgOiBoZHIkMTEwLFxyXG4gICAgbWVzaCA6IG1lc2gkMTExLFxyXG4gICAgc2ggOiBzaCQxMTIsXHJcbiAgICB0ZXh0dXJlIDogdGV4dHVyZSQxMTMsXHJcbiAgICB0cmFuc2ZlcmFibGUgOiB0cmFuc2ZlcmFibGUkMTE0XHJcbn07XHJcbmV4cG9ydCB7IHV0aWwgfTtcclxuXHJcbmV4cG9ydCB7IHZlcnNpb24kMTE1IGFzIHZlcnNpb24gfTtcclxuXHJcbnZhciB2ciA9IHtcclxuICAgIENhcmRib2FyZERpc3RvcnRlciA6IENhcmRib2FyZERpc3RvcnRlciQxMTYsXHJcbiAgICBTdGVyZW9DYW1lcmEgOiBTdGVyZW9DYW1lcmEkMTE3XHJcbn07XHJcbmV4cG9ydCB7IHZyIH07XHJcbjtcclxuIl0sIm5hbWVzIjpbImVhc2luZyIsIkVhc2luZyIsImVhc2luZ0Z1bmNzIiwiR0xNQVRfUkFORE9NIiwidXRpbCIsIm5vdGlmaWVyTWl4aW4iLCJMUlUiLCJwYXJzZUNvbG9yIiwiZ2V0RGVmaW5lQ29kZSIsInByZXpFc3NsIiwibm9vcCIsInByb3RvIiwiZGVmaW5lUHJvcGVydHkiLCJsaWdodFNoYWRlciIsIlBsYW5lIiwidmVjM1NldCIsInZlYzNDb3B5IiwiRVBTSUxPTiIsInByb2dyYW1LZXlDYWNoZSIsImdldFByb2dyYW1LZXkiLCJMUlVDYWNoZSIsIkF0dHJpYnV0ZSIsIkN1YmUiLCJTcGhlcmUiLCJQYXJhbWV0cmljU3VyZmFjZSIsImlzUG93ZXJPZlR3byIsIlBlcnNwZWN0aXZlIiwiT3J0aG9ncmFwaGljIiwidXRpbEVzc2wiLCJzaGFkZXJMaWJyYXJ5IiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJPcnRob2dyYXBoaWNDYW1lcmEiLCJjYW1lcmEiLCJPcnRob0NhbWVyYSIsIlNreWJveCIsIkN1YmVHZW9tZXRyeSIsInRhcmdldHMiLCJyZXQiLCJoZHIiLCJkZHMiLCJTa3lkb21lIiwiQ3ViZUdlbyIsIlNwaGVyZUdlbyIsIlBsYW5lR2VvIiwiUGFyYW1ldHJpY1N1cmZhY2VHZW8iLCJzaFV0aWwiLCJHcmFwaE5vZGUiLCJTY2VuZU5vZGUiLCJUZXh0dXJlTm9kZSIsIkZpbHRlck5vZGUiLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIiwiQ29tcG9TY2VuZU5vZGUiLCJDb21wb1RleHR1cmVOb2RlIiwiQ29tcG9GaWx0ZXJOb2RlIiwiQ29uZSIsIkN5bGluZGVyIiwiQ29uZUdlb21ldHJ5IiwiQ29uZUdlbyIsIkN5bGluZGVyR2VvIiwiRnVsbFF1YWRQYXNzIiwib3V0cHV0RXNzbCIsIkJhc2UiLCJDYW1lcmEiLCJBbmltYXRvciQwIiwiQmxlbmQxRENsaXAkMSIsIkJsZW5kMkRDbGlwJDIiLCJDbGlwJDMiLCJlYXNpbmckNCIsIlNhbXBsZXJUcmFjayQ1IiwiVGltZWxpbmUkNiIsIlRyYWNrQ2xpcCQ3IiwiVGFzayQ5IiwiVGFza0dyb3VwJDEwIiwiT3J0aG9ncmFwaGljJDEyIiwiUGVyc3BlY3RpdmUkMTMiLCJDb21wb3NpdG9yJDE0IiwiQ29tcG9zaXRvck5vZGUkMTUiLCJjcmVhdGVDb21wb3NpdG9yJDE2IiwiRmlsdGVyTm9kZSQxNyIsIkdyYXBoJDE4IiwiUGFzcyQxOSIsIlNjZW5lTm9kZSQyMCIsIlRleHR1cmVOb2RlJDIxIiwiVGV4dHVyZVBvb2wkMjIiLCJCYXNlJDIzIiwiQ2FjaGUkMjQiLCJjb2xvciQyNSIsImdsZW51bSQyNiIsIkdMSW5mbyQyNyIsIkxpbmtlZExpc3QkMjgiLCJMUlUkMjkiLCJleHRlbmQkMzAiLCJub3RpZmllciQzMSIsInJlcXVlc3QkMzIiLCJ1dGlsJDMzIiwidmVuZG9yJDM0IiwiR0J1ZmZlciQzNiIsIlJlbmRlcmVyJDM3IiwiZ2xtYXRyaXgkMzgiLCJDb25lJDQxIiwiQ3ViZSQ0MiIsIkN5bGluZGVyJDQzIiwiUGFyYW1ldHJpY1N1cmZhY2UkNDQiLCJQbGFuZSQ0NSIsIlNwaGVyZSQ0NiIsIkFtYmllbnQkNTAiLCJBbWJpZW50Q3ViZW1hcCQ1MSIsIkFtYmllbnRTSCQ1MiIsIkRpcmVjdGlvbmFsJDUzIiwiUG9pbnQkNTQiLCJTcGhlcmUkNTUiLCJTcG90JDU2IiwiVHViZSQ1NyIsIkZYJDU4IiwiR0xURiQ1OSIsIkJvdW5kaW5nQm94JDYxIiwiRnJ1c3R1bSQ2MiIsIk1hdHJpeDIkNjMiLCJNYXRyaXgyZCQ2NCIsIk1hdHJpeDMkNjUiLCJNYXRyaXg0JDY2IiwiUGxhbmUkNjciLCJRdWF0ZXJuaW9uJDY4IiwiUmF5JDY5IiwidXRpbCQ3MCIsIlZhbHVlJDcxIiwiVmVjdG9yMiQ3MiIsIlZlY3RvcjMkNzMiLCJWZWN0b3I0JDc0IiwiRW1pdHRlciQ3NyIsIkZpZWxkJDc4IiwiRm9yY2VGaWVsZCQ3OSIsIlBhcnRpY2xlJDgwIiwiUGFydGljbGVSZW5kZXJhYmxlJDgxIiwiUGl4ZWxQaWNraW5nJDgyIiwiUmF5UGlja2luZyQ4MyIsIkZyZWVDb250cm9sJDg0IiwiR2FtZXBhZENvbnRyb2wkODUiLCJHZXN0dXJlTWdyJDg2IiwiSW5maW5pdGVQbGFuZSQ4NyIsIk9yYml0Q29udHJvbCQ4OCIsIlNreWJveCQ4OSIsIlNreWRvbWUkOTAiLCJFbnZpcm9ubWVudE1hcCQ5MSIsIlNoYWRvd01hcCQ5MiIsImxpYnJhcnkkOTciLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IiwibGlnaHQkOTkiLCJjdWJlbWFwJDEwNyIsImRkcyQxMDgiLCJkZWxhdW5heSQxMDkiLCJoZHIkMTEwIiwibWVzaCQxMTEiLCJzaCQxMTIiLCJ0ZXh0dXJlJDExMyIsInRyYW5zZmVyYWJsZSQxMTQiLCJDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IiwiU3RlcmVvQ2FtZXJhJDExNyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7O0FBS0EsSUFBSSxNQUFNLEdBQUc7Ozs7OztJQU1ULE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsQ0FBQztLQUNaOzs7Ozs7SUFNRCxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCOzs7Ozs7SUFNRCxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RCOzs7Ozs7SUFNRCxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RDOzs7Ozs7SUFNRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQjs7Ozs7O0lBTUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxF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LFFBQVEsR0FBRyxPQUFPLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUMvQjs7U0FFSTtRQUNELEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRO1lBQ3RCLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztZQUNyQixFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FB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QUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwRDtTQUNKOzs7UUFHRCxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7UUFFdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxD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LENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxD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QUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O0lBRXJCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUVoRCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7SUFFN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLENBQUM7Ozs7Ozs7QUFPRixXQUFXLENBQUMsU0FBUyxD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QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FB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QUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdkIsSUFBSTtRQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xELENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2hDLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDOztJQUVyQixJQUFJLENBQUMsR0FBR0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQ0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDOztJQUV4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7O0lBR3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztNQUVkLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7TUFHakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUczQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7SUFFakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUduQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENB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RyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxD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QUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtRQUNULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUNoQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQzs7O0lBR3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxjQUFZLEVBQUUsQ0FBQztJQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdBLGNBQVksRUFBRSxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFH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LENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEIsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFD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RyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6RyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWxDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUUzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRWpCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENB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QUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUM5QixJQUFJLEtB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SyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNyZ0JGOzs7QUFHQSxBQUlBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuQyxPQUFPLEdBQUcsQ0FBQztDQUNkOztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFOzs7O0lBSXJDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7OztJQUd4QyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFOUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2IsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0tBQ2I7O0lBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUksUUFBUSxFQUFFOztRQUUxQixLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDeEM7U0FDSTs7O1FBR0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNkOztJQUVELEdBQUcsQ0FBQyxD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R0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM5RCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDN0U7O0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJ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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFD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QUM7SUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxH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Q0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVB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LENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFcEQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRXZELEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOztRQUVsRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOzs7SUFHaEMsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNoRixDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR3ZELElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFNUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBRzFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUduQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRXpDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7QUFNekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOzs7Ozs7Ozs7QUFTckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRXZCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDckQsTUFBTTtRQUNILEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7UUFFekQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqRDs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUN2QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7SUFFbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUU7O0lBRW5ELEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNULENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDOztJQUVULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHakQsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7OztJQUd0RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFD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QUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztJQUVoRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNa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Q0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMVYsQ0FBQzs7QUM3NkJGOztBQUVBLEFBYUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDSyxRQUFRLENBQUMsQ0FBQzs7QUFFM0IsQUFHQSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOztBQUU3QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7O0FBRXJCLFNBQVMsa0JBQWtCLENBQUMsVUFBVSxFQUFFO0lBQ3BDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztDQUM5QjtBQUNELFNBQVMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7SUFDckQsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztDQUMxQztBQUNELFNBQVMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFO0lBQ25GLE9BQU8sUUFBUSxLQUFLLFlBQVksQ0FBQztDQUNwQztBQUNELFNBQVMsZUFBZSxDQUFDLFVBQVUsRUFBRTtJQUNqQyxPQUFPLElBQUksQ0FBQztDQUNmOztBQUVELFNBQVNDLE1BQUksR0FBRyxFQUFFOztBQUVsQixJQUFJLHNCQUFzQixHQUFHO0lBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztJQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7SUFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxhQUFhO0lBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztJQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLGNBQWM7Q0FDaEMsQ0FBQzs7QUFFRixTQUFTLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGFBQWEsRUFBRTtJQUN0RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFDL0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0lBQzNELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOztJQUVuQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztDQUNuQjs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUNsQyxJQUFJLFdBQVcsQ0FBQztJQUNoQixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsUUFBUSxFQUFFO1FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUU7O1lBRWQsV0FBVyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQyxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7O1FBRUQsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyQixJQUFJLFNBQVMsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUM5QixJQUFJLFNBQVMsRUFBRTtZQUNYLFlBQVksR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDckM7UUFDRCxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsSUFBSSxTQUFTLEVBQUU7WUFDWCxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3BGO0tBQ0osQ0FBQztJQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxRQUFRLEVBQUU7UUFDOUIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekQsQ0FBQztJQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWTtRQUM1QixPQUFPLElBQUksQ0FBQztLQUNmLENBQUM7Q0FDTDs7Ozs7QUFLRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDbkMsb0NBQW9DOzs7Ozs7UUFNaEMsTUFBTSxFQUFFLElBQUk7Ozs7Ozs7UUFPWixNQUFNLEVBQUUsR0FBRzs7Ozs7OztRQU9YLE9BQU8sRUFBRSxHQUFHOzs7Ozs7Ozs7UUFTWixnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssR0FBRzs7Ozs7O1FBTW5GLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7Ozs7OztRQU9oQyxRQUFRLEVBQUUsS0FBSzs7Ozs7Ozs7O1FBU2YsS0FBSyxFQUFFLElBQUk7Ozs7O1FBS1gsS0FBSyxFQUFFLElBQUk7Ozs7O1FBS1gsT0FBTyxFQUFFLEtBQUs7Ozs7O1FBS2QsU0FBUyxFQUFFLElBQUk7Ozs7O1FBS2Ysa0JBQWtCLEVBQUUsSUFBSTs7Ozs7UUFLeEIscUJBQXFCLEVBQUUsS0FBSzs7Ozs7UUFLNUIsVUFBVSxFQUFFLElBQUk7Ozs7O1FBS2hCLEVBQUUsRUFBRSxJQUFJOzs7OztRQUtSLFFBQVEsRUFBRSxFQUFFOzs7UUFHWixvQkFBb0IsRUFBRSxJQUFJOztRQUUxQixjQUFjLEVBQUUsRUFBRTtRQUNsQixXQUFXLEVBQUUsRUFBRTs7UUFFZixlQUFlLEVBQUUsSUFBSTtLQUN4QixDQUFDO0NBQ0wsRUFBRSxZQUFZOztJQUVYLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDdkM7SUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3pCLElBQUk7UUFDQSxJQUFJLElBQUksR0FBRztZQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzNDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7U0FDcEQsQ0FBQzs7UUFFRixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztlQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDOztRQUVyRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztTQUNyQjs7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFbkMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRTtZQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7O1FBRTlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNqQjtJQUNELE9BQU8sQ0FBQyxFQUFFO1FBQ04sTUFBTSwrQkFBK0IsR0FBRyxDQUFDLENBQUM7S0FDN0M7OztJQUdELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRTVDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzNEOztBQUVEOzs7Ozs7SUFNSSxNQUFNLEVBQUUsU0FBUyxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzVCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7OztRQUd6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDaEMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2YsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDdkM7O1lBRUQsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQzs7WUFFN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDekI7YUFDSTtZQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUN0Qzs7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDckQ7Ozs7OztJQU1ELFFBQVEsRUFBRSxZQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN0Qjs7Ozs7O0lBTUQsU0FBUyxFQUFFLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0tBQ3ZCOzs7Ozs7SUFNRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsT0FBTyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7S0FDM0M7Ozs7OztJQU1ELG1CQUFtQixFQUFFLFNBQVMsZ0JBQWdCLEVBQUU7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDMUM7Ozs7OztJQU1ELG1CQUFtQixFQUFFLFlBQVk7UUFDN0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7S0FDaEM7Ozs7Ozs7SUFPRCxjQUFjLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDNUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxQzs7Ozs7OztJQU9ELGNBQWMsRUFBRSxVQUFVLElBQUksRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0JELFdBQVcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7O1FBRTdDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQzs7WUFFWixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNWLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1YsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDcEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztTQUM5QjtRQUNELEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDOztRQUVuQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVE7WUFDWixDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRztTQUM5QyxDQUFDOztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsTUFBTTtZQUNkLGdCQUFnQixFQUFFLEdBQUc7U0FDeEIsQ0FBQztLQUNMOzs7OztJQUtELFlBQVksRUFBRSxZQUFZO1FBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMzQzs7Ozs7SUFLRCxlQUFlLEVBQUUsWUFBWTtRQUN6QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvQztLQUNKOzs7OztJQUtELFNBQVMsRUFBRSxZQUFZO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDOUIsQ0FBQyxDQUFDO0tBQ047Ozs7O0lBS0QsWUFBWSxFQUFFLFlBQVk7UUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQ2hDO0tBQ0o7O0lBRUQsa0JBQWtCLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7S0FDaEM7Ozs7Ozs7Ozs7SUFVRCxNQUFNLEVBQUUsU0FBUyxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUU7UUFDbEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7UUFFbEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7UUFFakMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFOzs7WUFHZixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQzVDLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU87b0JBQzlELFdBQVcsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDO21CQUN0RCxRQUFRLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO2NBQzdCO2dCQUNFLFlBQVksR0FBRyxJQUFJLENBQUM7OztnQkFHcEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQzthQUNoSTtZQUNELEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0UsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekIsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDakM7U0FDSjs7OztRQUlELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtRQUNELEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7UUFFckIsTUFBTSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUNsRCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFFdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7O1FBRTdCLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUM3QyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDOztRQUVuQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQzs7O1FBRy9ELElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdCO2FBQ0k7WUFDRCxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjs7O1FBR0QsSUFBSSxZQUFZLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksVUFBVSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hDOzs7UUFHRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7WUFDaEMsV0FBVyxFQUFFLFVBQVUsVUFBVSxFQUFFO2dCQUMvQixPQUFPLGFBQWEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQy9DO1lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDdEMsQ0FBQyxDQUFDOztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRTtZQUNyQyxXQUFXLEVBQUUsVUFBVSxVQUFVLEVBQUU7Z0JBQy9CLE9BQU8sYUFBYSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDL0M7WUFDRCxXQUFXLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtTQUMzQyxDQUFDLENBQUM7O1FBRUgsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7OztRQUc5RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztLQUMvQjs7SUFFRCxVQUFVLEVBQUUsVUFBVSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRTtRQUNyRCxjQUFjLEdBQUcsY0FBYyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3pFOztJQUVELGVBQWUsRUFBRSxVQUFVLE9BQU8sRUFBRTtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUMvQixJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU87YUFDVjtZQUNELFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDOztZQUVwQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDN0I7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDbkM7O1NBRUo7O0tBRUo7O0lBRUQsY0FBYyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7UUFDL0MsSUFBSSxXQUFXLEdBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFdBQVcsS0FBSyxrQkFBa0IsQ0FBQztRQUMvRSxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNQLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksYUFBYSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7Z0JBRWpFLElBQUksU0FBUyxLQUFLLGFBQWE7dUJBQ3hCLFVBQVUsQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLFFBQVE7dUJBQy9DLFVBQVUsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLFVBQVU7a0JBQ3hEO29CQUNFLFVBQVUsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsU0FBUztpQkFDWjthQUNKOztZQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7O1lBRTdFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7O1lBRTlCLFVBQVUsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1NBQ2xDO0tBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQkQsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQzs7UUFFakUsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDOUIsVUFBVSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLGtCQUFrQixDQUFDO1FBQ3RFLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxpQkFBaUIsQ0FBQzs7UUFFbkUsVUFBVSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSx3QkFBd0IsQ0FBQztRQUN4RixVQUFVLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLElBQUlBLE1BQUksQ0FBQztRQUMxRCxVQUFVLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLElBQUlBLE1BQUksQ0FBQzs7UUFFeEQsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUM7O1FBRTVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUQsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JDOzs7UUFHRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyQyxJQUFJLGVBQWUsR0FBRztZQUNsQixRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFDcEMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJO1NBQ2hELENBQUM7UUFDRixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDdEMsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CO2NBQzNDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2NBQzNGLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQzs7UUFFMUQsSUFBSSxtQkFBbUIsR0FBRztZQUN0QixlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUN6QyxDQUFDO1FBQ0YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDOzs7UUFHdEIsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hFO2FBQ0k7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDOztRQUVyRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7O1FBRWpDLElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksY0FBYyxDQUFDOzs7UUFHbkIsSUFBSSxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQ3pCLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDakMsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksd0JBQXdCLENBQUM7Ozs7UUFJN0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDOztRQUVsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUM7WUFDcEQsSUFBSSxNQUFNLENBQUM7O1lBRVgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDN0IsU0FBUzthQUNaOzs7WUFHRCxJQUFJLFdBQVcsRUFBRTtnQkFDYixNQUFNLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUU7c0JBQzFELFFBQVEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7YUFDN0Q7WUFDRCxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ25DLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQzs7WUFFN0QsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDOztZQUU3QixJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQzdELElBQUksYUFBYSxHQUFHLGFBQWEsS0FBSyxNQUFNLENBQUM7WUFDN0MsTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUN2QixJQUFJLGFBQWEsSUFBSSxNQUFNLEVBQUU7O2dCQUV6QixNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFDRCxJQUFJLFdBQVcsRUFBRTtnQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWTtvQkFDbkMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUM5QztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCO29CQUN2QyxNQUFNLENBQUMsZUFBZSxDQUFDLHlCQUF5QixFQUFFO29CQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzlEO2dCQUNELElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQywwQkFBMEI7b0JBQ2pELE1BQU0sQ0FBQyxlQUFlLENBQUMsbUNBQW1DLEVBQUU7b0JBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2lCQUNsRjthQUNKOzs7WUFHRCxVQUFVLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBRXZFLElBQUksY0FBYyxHQUFHLE9BQU8sS0FBSyxXQUFXLENBQUM7WUFDN0MsSUFBSSxjQUFjLEVBQUU7O2dCQUVoQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztnQkFFbkIsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3BFLElBQUksTUFBTSxFQUFFO29CQUNSLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN4RDtnQkFDRCxPQUFPLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxPQUFPLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7Z0JBRWhELE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7Ozs7Z0JBSXhFLElBQUksS0FBSyxFQUFFO29CQUNQLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDaEU7YUFDSjtpQkFDSTtnQkFDRCxPQUFPLEdBQUcsV0FBVyxDQUFDO2FBQ3pCOzs7WUFHRCxJQUFJLGNBQWMsSUFBSSxVQUFVLENBQUMsaUJBQWlCO2dCQUM5QyxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxZQUFZO2FBQ3JELEVBQUU7Z0JBQ0MsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtvQkFDbEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDOUUsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7aUJBQ2xDO2dCQUNELElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7b0JBQ2xDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNsQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztpQkFDbEM7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtvQkFDdEMsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEUsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7aUJBQ3RDOztnQkFFRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7b0JBQ3RCLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTt3QkFDaEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDdkI7eUJBQ0k7O3dCQUVELEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEQsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7cUJBQ25HO2lCQUNKOztnQkFFRCx3QkFBd0IsR0FBRyxJQUFJLENBQUMsYUFBYTtvQkFDekMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPO29CQUM3QixjQUFjLElBQUksSUFBSSxFQUFFLFlBQVksSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLElBQUk7b0JBQ2pFLFVBQVUsQ0FBQyxVQUFVO2lCQUN4QixDQUFDO2dCQUNGLFlBQVksR0FBRyxRQUFRLENBQUM7YUFDM0I7O1lBRUQsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUM7O1lBRW5ELElBQUksV0FBVyxFQUFFO2dCQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hELElBQUksUUFBUSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRTt3QkFDMUIsSUFBSSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7d0JBQ25FLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7cUJBQzdDO29CQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDM0U7YUFDSjs7WUFFRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUNsQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMxQjtZQUNELElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3BDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUNqQyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRTtnQkFDaEMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNwRTs7WUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztZQUNwRSxJQUFJLGFBQWEsRUFBRTtnQkFDZixVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNqRTtZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDOzs7WUFHM0MsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDekMsVUFBVSxDQUFDLFdBQVcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUV2RCxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLGNBQWMsR0FBRyxVQUFVLENBQUM7U0FDL0I7OztRQUdELElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DOztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDbkU7O0lBRUQsaUJBQWlCLEVBQUUsWUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztLQUMzQzs7SUFFRCxlQUFlLEVBQUUsVUFBVSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtRQUM5QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7O1FBRS9CLElBQUksUUFBUSxFQUFFOztZQUVWLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxtQkFBbUIsR0FBRyxRQUFRLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVGLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4RCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2RjtpQkFDSTtnQkFDRCxJQUFJLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkYsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzthQUN2RTtTQUNKO0tBQ0o7O0lBRUQsYUFBYSxFQUFFLFVBQVUsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUN0QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7O1FBRW5DLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDakMsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3BCLFVBQVUsR0FBRyxNQUFNLENBQUM7U0FDdkI7Ozs7OztRQU1ELElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRTtZQUNuQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDNUQsSUFBSSxVQUFVLEdBQUcsT0FBTyxLQUFLLFFBQVEsQ0FBQyxPQUFPLFlBQVksV0FBVyxDQUFDLENBQUM7WUFDdEUsSUFBSSxXQUFXLEdBQUcsVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQzs7WUFFckUsR0FBRyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO2FBQ0k7OztZQUdELEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdkQ7S0FDSjs7SUFFRCxhQUFhLEVBQUUsVUFBVSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUU7UUFDaEgsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7OztRQUlsQixJQUFJLFdBQVcsR0FBRyxXQUFXLEtBQUssT0FBTyxDQUFDOztRQUUxQyxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3RELElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDOztRQUVsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakUsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7Ozs7WUFJakQsSUFBSSxXQUFXLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRTs7Z0JBRXJDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDNUI7aUJBQ0ksSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO2dCQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ2pCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQy9CO2lCQUNKO2FBQ0o7U0FDSjs7UUFFRCxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7OztRQUcvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QyxJQUFJLFlBQVksR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqRSxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQy9CLElBQUksU0FBUyxHQUFHLFdBQVcsS0FBSyxHQUFHLENBQUM7O1lBRXBDLElBQUksU0FBUyxFQUFFO2dCQUNYLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQUU7b0JBQy9DLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztpQkFDckM7YUFDSjs7Ozs7WUFLRCxJQUFJLFlBQVksSUFBSSxXQUFXLEVBQUU7Z0JBQzdCLElBQUksZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdFLElBQUksU0FBUyxFQUFFO29CQUNYLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUN2RCxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztxQkFDekM7aUJBQ0o7O2dCQUVELElBQUksZ0JBQWdCLEtBQUssWUFBWSxFQUFFO29CQUNuQyxJQUFJLFNBQVMsRUFBRTs7d0JBRVgsT0FBTyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDOUM7eUJBQ0ksSUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLFlBQVksRUFBRTt3QkFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQzFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQzlDO3FCQUNKO29CQUNELFNBQVM7aUJBQ1o7YUFDSjs7WUFFRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLFNBQVM7YUFDWjtpQkFDSSxJQUFJLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDekIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQ3hDLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RELElBQUksR0FBRyxFQUFFO3dCQUNMLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQ25ELFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO3FCQUM5QjtpQkFDSjs7cUJBRUk7b0JBQ0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzlEO2FBQ0o7aUJBQ0ksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUMzQixTQUFTO2lCQUNaOztnQkFFRCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUM3QixTQUFTO3FCQUNaOztvQkFFRCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQzFDLElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7d0JBRTlCLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3BCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOzRCQUN4QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNmLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7NEJBQzlDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO3lCQUN6Qjs2QkFDSTs0QkFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDNUI7cUJBQ0o7O29CQUVELE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQy9DO3FCQUNJO29CQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUMvRDthQUNKO2dCQUNHO2dCQUNBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQy9EO1NBQ0o7UUFDRCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs7UUFFM0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0MsT0FBTyxPQUFPLENBQUM7S0FDbEI7O0lBRUQsUUFBUSxFQUFFLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO1FBQ25ELElBQUksUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNqQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDOztRQUVsQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2pELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCLE9BQU87YUFDVjtZQUNELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDOztZQUV4QyxJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUM3QixJQUFJLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztZQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksUUFBUSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDNUMsSUFBSSxNQUFNLENBQUM7Z0JBQ1gsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxNQUFNLEdBQUcsWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUM7aUJBQ2hEO3FCQUNJO29CQUNELE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQ2pCO2dCQUNELElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3RDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUM5Qyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzFDO2FBQ0o7O1lBRUQsR0FBRyxHQUFHLElBQUksaUJBQWlCO2dCQUN2QixtQkFBbUI7Z0JBQ25CLHlCQUF5QjtnQkFDekIsYUFBYTthQUNoQixDQUFDOztZQUVGLElBQUksUUFBUSxFQUFFO2dCQUNWLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3BDO1NBQ0o7O1FBRUQsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7Ozs7UUFJL0IsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFOzs7WUFHcEIsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDakIsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUMzQztpQkFDSTtnQkFDRCxtQkFBbUIsR0FBRyxLQUFLLENBQUM7YUFDL0I7WUFDRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RDOztRQUVELElBQUksbUJBQW1CLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDO1FBQ2xELElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7O1FBRXRDLElBQUksbUJBQW1CLEVBQUU7WUFDckIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMseUJBQXlCLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQzs7WUFFOUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDakIsU0FBUztpQkFDWjtnQkFDRCxJQUFJLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hDLElBQUksSUFBSSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDcEMsSUFBSSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQzs7Z0JBRTNFLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDaEU7O1lBRUQsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3pCLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNsRTtTQUNKOztRQUVELE9BQU8sR0FBRyxDQUFDO0tBQ2Q7O0lBRUQsVUFBVSxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDdkMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxRQUFRLENBQUM7WUFDdEQsTUFBTSxFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDN0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQzs7UUFFdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDOzs7UUFHcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQzFCLFFBQVEsRUFBRSxVQUFVLFVBQVUsRUFBRTtnQkFDNUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7YUFDakM7WUFDRCxpQkFBaUIsRUFBRSxVQUFVLFVBQVUsRUFBRSxjQUFjLEVBQUU7Z0JBQ3JELElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQy9CLElBQUksSUFBSSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQzt1QkFDakQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzVFO1lBQ0QsVUFBVSxFQUFFLFVBQVUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3JELElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtvQkFDdkIsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDaEQ7cUJBQ0ksSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFO29CQUMvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUM7MkJBQ3BELFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztzQkFDMUM7d0JBQ0UsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQ3pELE9BQU8sV0FBVyxJQUFJLENBQUMsQ0FBQztxQkFDM0I7b0JBQ0QsT0FBTyxDQUFDLENBQUM7aUJBQ1o7cUJBQ0ksSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO29CQUM1QixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUM5QztxQkFDSSxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUU7b0JBQzVCLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQzlDO3FCQUNJO29CQUNELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDcEM7YUFDSjtZQUNELFdBQVcsRUFBRSxZQUFZO2dCQUNyQixPQUFPLGdCQUFnQixDQUFDO2FBQzNCO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDL0IsQ0FBQyxDQUFDOztRQUVILEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN2Qjs7Ozs7O0lBTUQsWUFBWSxFQUFFLFNBQVMsS0FBSyxFQUFFO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbkI7Ozs7Ozs7O0lBUUQsV0FBVyxFQUFFLFNBQVMsSUFBSSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUU7O1FBRXpELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtZQUN6QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxlQUFlLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxjQUFjLElBQUksUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDOUQsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3BELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM3QyxJQUFJLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUMvQyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDdEQsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDTixTQUFTO3FCQUNaO29CQUNELElBQUksV0FBVyxLQUFLLEdBQUcsRUFBRTt3QkFDckIsR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNwQzt5QkFDSSxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7d0JBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUNqQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FDUixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQzFDO3lCQUNKO3FCQUNKO2lCQUNKO2dCQUNELFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3hDOztZQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1NBQ0osRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNaOzs7Ozs7SUFNRCxlQUFlLEVBQUUsU0FBUyxRQUFRLEVBQUU7UUFDaEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxQjs7Ozs7O0lBTUQsY0FBYyxFQUFFLFNBQVMsT0FBTyxFQUFFO1FBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7Ozs7OztJQU1ELGtCQUFrQixFQUFFLFNBQVMsV0FBVyxFQUFFO1FBQ3RDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7Ozs7O0lBS0QsT0FBTyxFQUFFLFlBQVksRUFBRTs7Ozs7Ozs7Ozs7O0lBWXZCLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO1FBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixHQUFHLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztTQUN2Qjs7UUFFRCxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7O1FBRXJCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFeEIsT0FBTyxHQUFHLENBQUM7S0FDZDtDQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7O0FBU0gsUUFBUSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFOztJQUUvRSxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUNqQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzthQUNsRDtZQUNELE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUM1QixPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQ3BEO1FBQ0QsT0FBTyxDQUFDLENBQUM7S0FDWjtJQUNELE9BQU8sQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO0NBQ3hDLENBQUM7Ozs7Ozs7OztBQVNGLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTs7O0lBR3pGLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFO1FBQ2pDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFO2dCQUM3QixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQkFDM0IsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztpQkFDbEQ7Z0JBQ0QsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzthQUNsRDtZQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFO2dCQUM3QixPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2FBQ3BEO1lBQ0QsT0FBTyxDQUFDLENBQUM7U0FDWjs7O1FBR0QsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDaEM7SUFDRCxPQUFPLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztDQUN4QyxDQUFDOzs7QUFHRixJQUFJLFFBQVEsR0FBRztJQUNYLFFBQVEsRUFBRSxVQUFVLEVBQUU7O0lBRXRCLEtBQUssRUFBRSxVQUFVLEVBQUU7SUFDbkIsSUFBSSxFQUFFLFVBQVUsRUFBRTtJQUNsQixVQUFVLEVBQUUsVUFBVSxFQUFFO0lBQ3hCLFNBQVMsRUFBRSxVQUFVLEVBQUU7SUFDdkIsY0FBYyxFQUFFLFVBQVUsRUFBRTtJQUM1QixtQkFBbUIsRUFBRSxVQUFVLEVBQUU7O0lBRWpDLFlBQVksRUFBRSxVQUFVLEVBQUU7SUFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBRTtJQUN6QixpQkFBaUIsRUFBRSxVQUFVLEVBQUU7SUFDL0IsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFO0lBQzlCLHFCQUFxQixFQUFFLFVBQVUsRUFBRTtJQUNuQywwQkFBMEIsRUFBRSxVQUFVLEVBQUU7O0lBRXhDLGNBQWMsRUFBRSxVQUFVLEVBQUU7SUFDNUIsYUFBYSxFQUFFLFVBQVUsRUFBRTtJQUMzQixtQkFBbUIsRUFBRSxVQUFVLEVBQUU7SUFDakMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFO0lBQ2hDLHVCQUF1QixFQUFFLFVBQVUsRUFBRTtJQUNyQyw0QkFBNEIsRUFBRSxVQUFVLEVBQUU7SUFDMUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFO0lBQ25DLG9CQUFvQixFQUFFLFVBQVUsRUFBRTtJQUNsQywwQkFBMEIsRUFBRSxVQUFVLEVBQUU7SUFDeEMseUJBQXlCLEVBQUUsVUFBVSxFQUFFO0lBQ3ZDLDhCQUE4QixFQUFFLFVBQVUsRUFBRTtJQUM1QyxtQ0FBbUMsRUFBRSxVQUFVLEVBQUU7Q0FDcEQsQ0FBQzs7Ozs7O0FBTUYsUUFBUSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7QUFLcEQsUUFBUSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7QUFLcEQsUUFBUSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQzs7QUN2ekN4RCxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztJQUU1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7Ozs7OztJQVNYLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFTdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdEIsQ0FBQzs7QUFFRixPQUFPLENBQUMsU0FBUyxHQUFHOztJQUVoQixXQUFXLEVBQUUsT0FBTzs7Ozs7OztJQU9wQixHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7Ozs7O0lBU0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsS0FBSyxFQUFFLFlBQVk7UUFDZixPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUM7Ozs7Ozs7SUFPRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7O0lBUUQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELElBQUksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN6Qzs7Ozs7OztJQU9ELFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0M7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN4Qzs7Ozs7O0lBTUQsR0FBRyxFQUFFLFlBQVk7UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQy9COzs7Ozs7SUFNRCxNQUFNLEVBQUUsWUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2xDOzs7Ozs7OztJQVFELElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsTUFBTSxFQUFFLFlBQVk7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxTQUFTLEVBQUUsWUFBWTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7Ozs7SUFRRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUM7Ozs7Ozs7SUFPRCxlQUFlLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDMUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3BEOzs7Ozs7SUFNRCxNQUFNLEVBQUUsWUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2xDOzs7Ozs7SUFNRCxhQUFhLEVBQUUsWUFBWTtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pDOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxhQUFhLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxhQUFhLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELGFBQWEsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGVBQWUsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUMxQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ25CLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDOzs7UUFHWixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7YUFDSTtZQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1FBRW5CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7O0lBRUQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRTtRQUM5QixPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekM7O0lBRUQsYUFBYSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRTtRQUMvQixPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekM7O0lBRUQsUUFBUSxFQUFFLFdBQVc7UUFDakIsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pFOztJQUVELE9BQU8sRUFBRSxZQUFZO1FBQ2pCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqRDtDQUNKLENBQUM7O0FBRUYsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7QUFFM0MsSUFBSSxjQUFjLEVBQUU7O0lBRWhCLElBQUlDLE9BQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDOzs7Ozs7O0lBTzlCLGNBQWMsQ0FBQ0EsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSCxjQUFjLENBQUNBLE9BQUssRUFBRSxHQUFHLEVBQUU7UUFDdkIsR0FBRyxFQUFFLFlBQVk7WUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSixDQUFDLENBQUM7Ozs7Ozs7O0lBUUgsY0FBYyxDQUFDQSxPQUFLLEVBQUUsR0FBRyxFQUFFO1FBQ3ZCLEdBQUcsRUFBRSxZQUFZO1lBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0tBQ0osQ0FBQyxDQUFDO0NBQ047Ozs7Ozs7Ozs7O0FBV0QsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDckIsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzFDLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOzs7Ozs7OztBQVFoQyxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDOzs7Ozs7O0FBTzdCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNyQyxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7OztBQU0vQixPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMs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TUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRWYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMs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R0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLFVBQVUsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENB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LENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFOztJQUU1QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7SUFFbEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUU1QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7Ozs7OztJQU0zQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07S0FDYjtDQUNKLENBQUM7O0FDeHdCRixJQUFJLE9BQU8sR0FBRyxXQUFXOztJQUVyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQzs7Ozs7Ozs7SUFRNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7SUFPM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdEIsQ0FBQzs7QUFFRixPQUFPLENBQUMsU0FBUyxHQUFHOztJQUVoQixXQUFXLEVBQUUsT0FBTzs7Ozs7O0lBTXBCLFFBQVEsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtELE9BQU8sRUFBRSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsS0FBSyxFQUFFLFdBQVc7UUFDZCxPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7Ozs7Ozs7SUFPRCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELFdBQVcsRUFBRSxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdkM7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNwQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNyQixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7Ozs7Ozs7SUFZRCxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxRQUFRLEVBQUUsV0FBVztRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxNQUFNLEVBQUUsV0FBVztRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7Ozs7O0lBU0QsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7Ozs7Ozs7SUFZRCxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7Ozs7SUFTRCxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7OztJQVNELE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUU7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FB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QUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTFGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXZCLE9BQU8sSUFBSSxDQUFDO1NBQ2YsQ0FBQztLQUNMLEdBQUc7Ozs7OztJQU1KLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFekIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWpCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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QyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O1FBR3ZEQyxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7OztRQUd0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O1lBRXhCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7OztZQUloREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFakRBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFaERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0RDthQUNJO1lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO1lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7OztZQUcxQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1lBRXZGLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ2hDLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7WUFHaENBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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Q0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUMzQixDQUFDOztZQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0MsQ0FBQztZQUNGLE1BQU07UUFDVixLQUFLLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxHQUFHLENBQUM7YUFDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0IsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxDQUFD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LENBQUM7Z0JBQ3hCLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztnQkFFNUIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUVoQyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUc7Z0JBQ2QsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHO2dCQUNkLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFF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Q0FBQyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFdkMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDdEM7O0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7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LENBQUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM5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QUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O29CQUU1QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztvQkFFMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztvQkFDM0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzs7b0JBRS9CLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUVyRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDOztvQkFFN0IsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDckMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztvQkFDbEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztvQkFDbEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQzs7b0JBRWxCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztvQkFFeEYsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjthQUNKO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDN0Q7O1FBRUQsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDbkMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN0QztJQUNELE9BQU8sS0FBSyxDQUFDO0NBQ2hCOzs7Ozs7Ozs7QUFTRCxFQUFFLENBQUMscUJBQXFCLEdBQUcsVUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7OztJQUl6RCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDOztJQUV6QixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksVUFBVSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDN0IsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtRQUNwQyxNQUFNLEdBQUcsSUFBSUksUUFBTyxDQUFDO1lBQ2pCLEtBQUssRUFBRSxVQUFVO1lBQ2pCLGNBQWMsRUFBRSxNQUFNO1NBQ3pCLENBQUMsQ0FBQztLQUNOO1NBQ0k7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hGLE1BQU0sR0FBRyxJQUFJTixRQUFNLENBQUM7WUFDaEIsS0FBSyxFQUFFLFVBQVU7WUFDakIsY0FBYyxFQUFFLE1BQU07U0FDekIsQ0FBQyxDQUFDO0tBQ047O0lBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBSSxXQUFXLEdBQUcsSUFBSSxTQUFTLENBQUM7UUFDNUIsS0FBSyxFQUFFLEtBQUs7UUFDWixNQUFNLEVBQUUsTUFBTTtLQUNqQixDQUFDLENBQUM7SUFDSCxJQUFJLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDakIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxJQUFJLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixDQUFDO1FBQ3BDLE9BQU8sRUFBRSxXQUFXO0tBQ3ZCLENBQUMsQ0FBQztJQUNILElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUdFLFNBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsVUFBVSxDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVU7WUFDbEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTTtZQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUQsQ0FBQztRQUNGLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDaEM7O0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QixXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7O0lBRTlCLE9BQU8sd0JBQXdCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDeEUsQ0FBQzs7QUNwTkY7Ozs7Ozs7Ozs7QUFVQSxBQWdDQSxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDOztBQUV4QyxBQUlBLElBQUksU0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVc7SUFDdEUsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXO0lBQ3JDLFlBQVksRUFBRSxnQkFBZ0I7Q0FDakMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5RkYsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRTs7SUFFdkIsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDcEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQzs7SUFFcEMsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTtRQUMxQixLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztLQUMzQjs7SUFFRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUN6QixHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNyQzs7SUFFRCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFOztJQUU3QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRO1dBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFDOztJQUUvQyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDdEIsV0FBVyxLQUFLLFlBQVksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0MsS0FBSyxDQUFDLGdCQUFnQixLQUFLLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7SUFFbkYsSUFBSSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQzVDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQzs7SUFFL0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN6QixJQUFJLFNBQVMsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQy9CLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLFVBQVUsQ0FBQztRQUM1QyxLQUFLLEVBQUUsTUFBTTtRQUNiLFFBQVEsRUFBRSxTQUFTO0tBQ3RCLENBQUMsQ0FBQzs7SUFFSCxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7SUFFbEQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7O0lBRWxDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7O0lBRXJCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUMzQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzNEOztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7Ozs7OztRQU0xQixTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRTs7Ozs7UUFLL0MsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUM7Ozs7O1FBS25ELEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDOzs7OztRQUs3QyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQzs7Ozs7O1FBTW5ELFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDOzs7Ozs7UUFNckQsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7Ozs7Ozs7UUFPekQsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Ozs7OztRQU0zRCxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7Ozs7OztRQU83RCxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLEVBQUUsRUFBRTs7UUFFckQsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxFQUFFLEVBQUU7O1FBRXpELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFO0tBQ2pELENBQUMsQ0FBQzs7Ozs7Ozs7O0lBU0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDbkMsTUFBTSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakQsT0FBTyxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDbkQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDckMsQ0FBQzs7Ozs7O0lBTUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztRQUV0QixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDZixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7O1FBRTlDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUU7WUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDL0YsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNaLENBQUM7O0lBRUYsV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7SUFFbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJaEIsS0FBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSUEsS0FBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7OztJQUcxQixJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUVsRSxXQUFXLEtBQUssV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQzs7SUFFN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDckM7O0lBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWTtRQUN6QixTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLFNBQVMsRUFBRTtZQUN2QyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLFlBQVksSUFBSSxTQUFTLENBQUM7O1lBRTFCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwQyxJQUFJLE1BQU0sRUFBRTtnQkFDUixNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ2pEO1lBQ0QsV0FBVyxLQUFLLFdBQVcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7O1lBRTdDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFL0IsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDakI7O1lBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0IsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNaLENBQUMsQ0FBQzs7SUFFSCxNQUFNLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtRQUNyRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7O1lBRWhCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1RTtLQUNKLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDWjs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtJQUM3QixPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLEdBQUcsWUFBWSxLQUFLO1lBQ3BELE9BQU8saUJBQWlCLEtBQUssV0FBVyxJQUFJLEdBQUcsWUFBWSxpQkFBaUIsQ0FBQztZQUM3RSxPQUFPLGdCQUFnQixLQUFLLFdBQVcsSUFBSSxHQUFHLFlBQVksZ0JBQWdCLENBQUMsQ0FBQztDQUN2Rjs7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtJQUM5QixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVE7VUFDeEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLE9BQU8sR0FBR2hCLE1BQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0Q7O0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBTyxFQUFFO0lBQzlCLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUM7Q0FDcEM7O0FBRUQsU0FBUyxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtJQUN2RSxJQUFJLEtBQUssR0FBR0EsTUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUN2QixLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN4QixLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN4QixJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7UUFDckIsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7S0FDakM7SUFDRCxPQUFPLEtBQUssQ0FBQztDQUNoQjs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0lBQ2xDLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTtRQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUMvQjtDQUNKOztBQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxVQUFVLEVBQUU7SUFDckQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzs7SUFFekIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRLEVBQUU7UUFDbEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFO1lBQ2xGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUNwQixPQUFPO2FBQ1Y7WUFDRCxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7WUFFdkMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDdEMsSUFBSSxPQUFPLEVBQUUsT0FBTyxDQUFDO1lBQ3JCLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQzs7WUFFdkIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxLQUFLLEdBQUcsT0FBTyxLQUFLLFVBQVU7c0JBQzVCLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3NCQUNsQixDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLE9BQU8sS0FBSyxZQUFZLEVBQUU7b0JBQzFCLE9BQU8sR0FBRyxXQUFXLENBQUM7aUJBQ3pCO3FCQUNJLElBQUksT0FBTyxLQUFLLFVBQVUsRUFBRTtvQkFDN0IsT0FBTyxHQUFHLFNBQVMsQ0FBQztpQkFDdkI7cUJBQ0ksSUFBSSxPQUFPLEtBQUssV0FBVyxFQUFFO29CQUM5QixPQUFPLEdBQUcsV0FBVyxDQUFDO2lCQUN6QjtnQkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQ3JDO2lCQUNJO2dCQUNELE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDakM7O1lBRUQsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7O1lBRW5ELElBQUksS0FBSyxDQUFDO1lBQ1YsSUFBSSxPQUFPLEtBQUssZ0JBQWdCLElBQUksT0FBTyxLQUFLLFlBQVksRUFBRTtnQkFDMUQsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RFOztZQUVELElBQUksVUFBVSxFQUFFOztnQkFFWixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO29CQUMxQixPQUFPO2lCQUNWOztnQkFFRCxJQUFJLE9BQU8sS0FBSyxXQUFXLEVBQUU7O29CQUV6QixJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztvQkFDcEQsSUFBSSxhQUFhLEVBQUU7d0JBQ2YsU0FBUyxJQUFJLGFBQWEsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRTs0QkFDM0QsTUFBTSxFQUFFLFNBQVM7eUJBQ3BCLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7cUJBQ3pCO29CQUNELGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUMxRixJQUFJLGFBQWEsRUFBRTt3QkFDZixhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztxQkFDN0Y7aUJBQ0o7cUJBQ0k7b0JBQ0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNoRztnQkFDRCxTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNqQztpQkFDSSxJQUFJLFNBQVMsRUFBRTtnQkFDaEIsYUFBYSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFO29CQUM5QyxNQUFNLEVBQUUsU0FBUztpQkFDcEIsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsU0FBUyxHQUFHLElBQUksQ0FBQzthQUNwQjtTQUNKLENBQUMsQ0FBQztLQUNOLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDWixDQUFDOztBQUVGLEtBQUssQ0FBQyxTQUFTLENBQUMscUJBQXFCLEdBQUcsVUFBVSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUMzRSxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0lBQ2xELElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDOztJQUV6QyxJQUFJLFlBQVksQ0FBQzs7SUFFakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUMzQixJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUU7WUFDdEIsU0FBUztTQUNaOztRQUVELGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3BHLElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksUUFBUSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQzFFLFVBQVUsR0FBRyxLQUFLLENBQUM7YUFDdEI7WUFDRCxVQUFVLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDcEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDekM7YUFDSTtZQUNELEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQzNDOztRQUVELFlBQVksR0FBRyxHQUFHLENBQUM7S0FDdEI7Q0FDSixDQUFDOztBQUVGLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRTtJQUNuRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3hDLENBQUM7Ozs7O0FBS0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBWTtJQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3hCLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN2QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzdCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7O0lBRWxDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNmLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixLQUFLLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7O0lBRWhELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFNUQsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRTdELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFdEMsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0NBQzFCLENBQUM7O0FBRUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZO0lBQzNDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN2QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3RDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7O0lBRTFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QixVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7OztJQUczQixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDekIsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDM0IsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOzs7SUFHNUQsZUFBZSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4QyxlQUFlLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDOztJQUUxQyxJQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQztJQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFDO0NBQzVDLENBQUM7OztBQUdGLFNBQVMsVUFBVSxDQUFDLFlBQVksRUFBRTtJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUM5QjtDQUNKOztBQUVELFNBQVMsZUFBZSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUU7SUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQztLQUNKO0NBQ0o7O0FBRUQsU0FBUyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRTtJQUNoQyxRQUFRLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3ZCO0NBQ0o7QUFDRCxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRTtJQUN4RSxJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLFlBQVksQ0FBQztJQUNqQixLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsVUFBVSxFQUFFO1FBQ2pDLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzNCLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzs7O1lBR25DLElBQUksUUFBUSxLQUFLLFlBQVksRUFBRTtnQkFDM0IsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3BELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM3QyxJQUFJLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUMvQyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDdEQsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDTixTQUFTO3FCQUNaO29CQUNELElBQUksV0FBVyxLQUFLLEdBQUcsRUFBRTt3QkFDckIsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO3FCQUN4Qzt5QkFDSSxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7d0JBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUNqQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FDUixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7NkJBQzNDO3lCQUNKO3FCQUNKO2lCQUNKO2FBQ0o7WUFDRCxJQUFJLFFBQVEsS0FBSyxZQUFZLEVBQUU7Z0JBQzNCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQzthQUM5Qzs7WUFFRCxZQUFZLEdBQUcsUUFBUSxDQUFDO1lBQ3hCLFlBQVksR0FBRyxRQUFRLENBQUM7U0FDM0I7S0FDSixDQUFDLENBQUM7O0lBRUgsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztRQUUxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQzVEO0tBQ0o7Q0FDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJELEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDOUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLElBQUksR0FBRyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUksUUFBUSxFQUFFO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO0tBQ0o7O0lBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ2pELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZO2dCQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLE9BQU87aUJBQ1Y7Z0JBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3BCLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNoQixPQUFPO2lCQUNWO2dCQUNELE1BQU0sRUFBRSxDQUFDO2FBQ1osQ0FBQyxDQUFDO1NBQ047YUFDSTtZQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQjtLQUNKLENBQUMsQ0FBQztJQUNILElBQUksUUFBUSxFQUFFO1FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxPQUFPLENBQUM7Q0FDbEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCRixLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxVQUFVLFFBQVEsRUFBRSxJQUFJLEVBQUU7SUFDeEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDOUIsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLEVBQUU7WUFDekQsT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUN4QyxRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUMvQixRQUFRLEVBQUUsS0FBSzthQUNsQixFQUFFLFlBQVk7Z0JBQ1gsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzlCLENBQUMsQ0FBQztZQUNILEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO2dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVCO1NBQ0o7YUFDSTtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUI7S0FDSjtTQUNJLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDbkMsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDekIsT0FBTyxDQUFDLE9BQU8sR0FBRyxRQUFRLFlBQVksZ0JBQWdCLENBQUM7S0FDMUQ7SUFDRCxPQUFPLE9BQU8sQ0FBQztDQUNsQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JGLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFVBQVUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUN2RCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQzFDLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4QjthQUNJO1lBQ0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZO2dCQUM1QixPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUNqQixNQUFNLEVBQUUsQ0FBQzthQUNaLENBQUMsQ0FBQztTQUNOO0tBQ0osQ0FBQyxDQUFDO0NBQ04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDM0QsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztJQUNqQyxJQUFJLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1FBQ3BHLE1BQU0sSUFBSSxLQUFLLENBQUMseUVBQXlFLENBQUMsQ0FBQztLQUM5RjtJQUNELElBQUksT0FBTyxPQUFPLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFBRTtRQUNoQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzdCO1NBQ0k7UUFDRCxXQUFXLENBQUMsS0FBSyxHQUFHQSxNQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzNDO0lBQ0QsT0FBTyxXQUFXLENBQUM7Q0FDdEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixLQUFLLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxVQUFVLFNBQVMsRUFBRTtJQUNsRCxTQUFTLEdBQUcsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUM1QixTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksaUJBQWlCLENBQUM7SUFDekQsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sWUFBWSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBR3lCLE9BQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pHLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDO1FBQ3hCLE1BQU0sRUFBRSxNQUFNO0tBQ2pCLENBQUMsQ0FBQztJQUNILElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtRQUNoQixRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7S0FDbEM7O0lBRUQsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1FBQzVCLE9BQU8sVUFBVSxPQUFPLEVBQUU7WUFDdEIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEMsU0FBUyxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRSxPQUFPLE9BQU8sQ0FBQztTQUNsQixDQUFDO0tBQ0w7SUFDRCxLQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRTtRQUN2QixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDO21CQUM1RCxFQUFFLEdBQUcsWUFBWSxPQUFPLENBQUM7Y0FDOUI7O2dCQUVFLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7b0JBQ3ZDLFlBQVksRUFBRSxTQUFTLENBQUMsbUJBQW1CLElBQUksS0FBSztvQkFDcEQsS0FBSyxFQUFFLFNBQVMsQ0FBQyxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUMsWUFBWTtpQkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEM7aUJBQ0k7Z0JBQ0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDakM7U0FDSjtLQUNKOztJQUVELElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRTtRQUN2QixTQUFTLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUM1QixTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztLQUNoQzs7O0lBR0QsSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsUUFBUSxFQUFFO1lBQ2xELFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckMsQ0FBQyxDQUFDO0tBQ047O0lBRUQsT0FBTyxRQUFRLENBQUM7Q0FDbkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO0lBQ2pFLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNoQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3JDOztJQUVELElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxJQUFJLEdBQUcsSUFBSVksTUFBTyxDQUFDO1lBQ2YsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDekIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7Q0FDdEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFDdkUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ2hCLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDckM7SUFDRCxJQUFJLE1BQU0sR0FBRyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1AsSUFBSSxHQUFHLElBQUlBLE1BQU8sQ0FBQztZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDekIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BDOztJQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQ3RELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJGLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFVBQVUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUU7SUFDeEUsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1FBQ3JCLFdBQVcsR0FBRyxFQUFFLENBQUM7S0FDcEI7SUFDRCxJQUFJLE1BQU0sR0FBRyxTQUFTLEdBQUcsV0FBVyxDQUFDO0lBQ3JDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDVCxNQUFNLEdBQUcsSUFBSUMsUUFBUyxDQUFDO1lBQ25CLGFBQWEsRUFBRSxXQUFXLEdBQUcsQ0FBQztZQUM5QixjQUFjLEVBQUUsV0FBVztTQUM5QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDdEM7SUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUN4RCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRixLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO0lBQ2xFLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNoQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0I7SUFDRCxJQUFJLE1BQU0sR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ1gsUUFBUSxHQUFHLElBQUlDLE9BQVEsQ0FBQztZQUNwQixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QixjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM1QixDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDeEM7SUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUMxRCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLEtBQUssQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRTtJQUNqRixJQUFJLEdBQUcsR0FBRyxJQUFJQyxtQkFBb0IsQ0FBQztRQUMvQixTQUFTLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUNyRCxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7SUFDOUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDaEIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsUUFBUSxFQUFFLEdBQUcsWUFBWSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO0tBQ3JFLENBQUMsQ0FBQztJQUNILFVBQVUsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sSUFBSSxDQUFDO0NBQ2YsQ0FBQzs7Ozs7OztBQU9GLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsVUFBVSxFQUFFO0lBQy9DLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDdEIsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsVUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDckUsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxjQUFjLEVBQUU7UUFDN0MsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNmLFVBQVUsR0FBR2IsY0FBa0IsQ0FBQztLQUNuQztTQUNJO1FBQ0QsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUNoQyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixHQUFHLElBQUksR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3BGO1FBQ0QsVUFBVSxHQUFHRCxhQUFpQixDQUFDO0tBQ2xDOztJQUVELElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDOUIsSUFBSSxRQUFRLFlBQVksT0FBTyxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ2xDO1NBQ0ksSUFBSSxRQUFRLFlBQVksS0FBSyxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3RDOztJQUVELElBQUksTUFBTSxZQUFZLEtBQUssRUFBRTtRQUN6QixNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RDtJQUNELElBQUksTUFBTSxZQUFZLE9BQU8sRUFBRTtRQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pCOztJQUVELElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtRQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7UUFDaEMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxQjtTQUNJO1FBQ0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7S0FDckQ7O0lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7O0lBRXZCLE9BQU8sTUFBTSxDQUFDO0NBQ2pCLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3RFLElBQUksS0FBSyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxJQUFJLEdBQUcsWUFBWSxPQUFPLEVBQUU7UUFDeEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7S0FDbkI7SUFDRCxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUMzQixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLFNBQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQzs7SUFFbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsT0FBTyxLQUFLLENBQUM7Q0FDaEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUU7SUFDOUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUM1QixLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLFlBQVksT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUM7O0lBRWpGLElBQUksTUFBTSxZQUFZLEtBQUssRUFBRTtRQUN6QixNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RDtJQUNELElBQUksTUFBTSxZQUFZLE9BQU8sRUFBRTtRQUMzQixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hCOztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzNCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0I7SUFDRCxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDdkMsS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLFNBQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNuRCxVQUFVLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDdEQsYUFBYSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxDQUFDOztJQUUvRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7SUFFdEIsT0FBTyxLQUFLLENBQUM7Q0FDaEIsQ0FBQzs7Ozs7Ozs7O0FBU0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUM1RSxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQzdCLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsWUFBWSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQzs7SUFFakYsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDM0IsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QjtJQUNELEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDdkMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDOztJQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7SUFFdEIsT0FBTyxLQUFLLENBQUM7Q0FDaEIsQ0FBQzs7Ozs7OztBQU9GLEtBQUssQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQzdELElBQUksS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7O0lBRS9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzNCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0I7SUFDRCxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDdkMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDOztJQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7SUFFdEIsT0FBTyxLQUFLLENBQUM7Q0FDaEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsR0FBRyxVQUFVLFFBQVEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRTtJQUM1SCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1FBQ2xCLFFBQVEsR0FBRyxDQUFDLENBQUM7S0FDaEI7SUFDRCxJQUFJLHNCQUFzQixJQUFJLElBQUksRUFBRTtRQUNoQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7S0FDL0I7O0lBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7SUFFdkIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLGFBQWEsRUFBRTtRQUN4QyxXQUFXLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRTtjQUMvQixPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztjQUN6QixJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQ3JDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWTtvQkFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNyQixDQUFDLENBQUM7YUFDTixDQUFDLENBQUM7S0FDVjtTQUNJO1FBQ0QsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxRQUFRO1NBQ3JCLENBQUMsQ0FBQztLQUNOOztJQUVELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLFVBQVUsRUFBRTtRQUMxQyxJQUFJLFNBQVMsR0FBRyxJQUFJLG1CQUFtQixDQUFDO1lBQ3BDLFNBQVMsRUFBRSxhQUFhLElBQUksSUFBSSxHQUFHLGFBQWEsR0FBRyxHQUFHO1NBQ3pELENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOztRQUV6QixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7O1FBRXZDLElBQUksU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDO1lBQy9CLFNBQVMsRUFBRSxhQUFhLElBQUksSUFBSSxHQUFHLGFBQWEsR0FBRyxHQUFHO1lBQ3RELFlBQVksRUFBRWUsRUFBTSxDQUFDLHFCQUFxQjtnQkFDdEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFO29CQUM5QixHQUFHLEVBQUUsQ0FBQztpQkFDVDthQUNKO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDOztRQUVyQixPQUFPO1lBQ0gsUUFBUSxFQUFFLFNBQVM7WUFDbkIsT0FBTyxFQUFFLFNBQVM7O1lBRWxCLGNBQWMsRUFBRSxVQUFVO1NBQzdCLENBQUM7S0FDTCxDQUFDLENBQUM7Q0FDTixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtJQUN6RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQ25DOztJQUVELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2xCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRTtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0tBQ2pDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxlQUFlLENBQUM7O0lBRTVDLElBQUksVUFBVSxHQUFHO1FBQ2IsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1FBQ3BCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1FBQ3JDLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtRQUMvQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO0tBQ2hELENBQUM7SUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7UUFDbEQsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNqRTs7SUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQzs7SUFFeEMsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDOztJQUVoQixPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtRQUMxQyxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixPQUFPO2FBQ1Y7O1lBRUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO29CQUNqQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxQixDQUFDLENBQUM7YUFDTjtZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQjtRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixPQUFPO2FBQ1Y7O1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDekIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JCO2lCQUNJO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxPQUFPLEVBQUU7b0JBQy9DLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUN4QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ25DO29CQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUU7d0JBQ2xDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQzFCLENBQUMsQ0FBQztpQkFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWTtvQkFDakIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQixDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7b0JBQ2pCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDckIsQ0FBQyxDQUFDO2FBQ047U0FDSixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDckIsTUFBTSxFQUFFLENBQUM7U0FDWixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCLENBQUMsQ0FBQztDQUNOLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFFO0lBQ3BELFVBQVUsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDOztJQUU1QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDckQsSUFBSSxVQUFVLEVBQUU7UUFDWixVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzNCOztJQUVELE9BQU8sT0FBTyxDQUFDO0NBQ2xCLENBQUM7OztBQUdGLGtCQUFlO0lBQ1gsS0FBSyxFQUFFLEtBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBdUJaLE1BQU0sRUFBRSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7UUFDMUIsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEM7Q0FDSjs7RUFBQyxGQ2oxQ0YsU0FBUyxJQUFJLEdBQUc7SUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztDQUMxQixBQUFDOzs7OztBQUtGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsSUFBSSxFQUFFO0lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ2pDLENBQUM7Ozs7O0FBS0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDOUIsQ0FBQzs7Ozs7QUFLRixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxXQUFXO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztDQUMzQixDQUFDOzs7OztBQUtGLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFdBQVc7SUFDbkMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0NBQ3pCLENBQUM7Ozs7O0FBS0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsV0FBVztJQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztDQUM3QyxDQUFDOztBQUVGekMsTUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQUV0QyxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFO0lBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDZixHQUFHLEVBQUUsR0FBRztRQUNSLFlBQVksRUFBRSxZQUFZO1FBQzFCLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxFQUFFLFNBQVMsS0FBSyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEI7S0FDSixDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksQ0FBQztDQUNmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLEdBQUcsRUFBRSxZQUFZLEVBQUU7SUFDL0MsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDekIsT0FBTyxlQUFlLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzdDO1NBQ0ksSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ2QsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2QsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDckQ7U0FDSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekIsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEVBQUU7WUFDMUIsSUFBSSxHQUFHLEVBQUUsWUFBWSxDQUFDO1lBQ3RCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUN6QixHQUFHLEdBQUcsR0FBRyxDQUFDO2FBQ2I7aUJBQ0ksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO2dCQUMxQixHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFDZCxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQzthQUNuQztZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0NBQ0osQ0FBQzs7OztBQUlGLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVztJQUN2QixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDckIsQ0FBQzs7QUFFRkEsTUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQzlHdEMsSUFBSSxTQUFTLEdBQUcsWUFBWTs7SUFFeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7O0lBRTVCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDOztJQUVqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDOztJQUUxQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztDQUM1QixDQUFDOztBQUVGLElBQUksSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO0FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNoQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7O0FBRWpDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CNUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxLQUFLLEVBQUU7SUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7O0lBRXpCQSxNQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLElBQUksRUFBRSxHQUFHLEVBQUU7UUFDbEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBQ0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEdBQUcsRUFBRTtZQUNoQyxLQUFLLEVBQUUsQ0FBQzs7WUFFUixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7OztZQUl4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs7WUFFdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNoQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QjtTQUNKLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVk7O1lBRTNCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQzs7WUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O1lBRXRCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckIsQ0FBQyxDQUFDO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQ2IsVUFBVSxDQUFDLFlBQVk7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7QUFNRixTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLEtBQUssRUFBRTtJQUM5QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNwQixVQUFVLENBQUMsWUFBWTtZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7O0lBRXBCQSxNQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLElBQUksRUFBRSxHQUFHLEVBQUU7UUFDbEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBQ0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEdBQUcsRUFBRTtZQUNoQyxLQUFLLEVBQUUsQ0FBQzs7WUFFUixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7WUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7O1lBRXZCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDaEIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdEI7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsRUFBRTtZQUM5QixLQUFLLEVBQUUsQ0FBQzs7WUFFUixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7O1lBRXZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOzs7WUFHdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QjtTQUNKLENBQUMsQ0FBQztLQUNOLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxDQUFDO0NBQ2YsQ0FBQzs7Ozs7O0FBTUYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLFNBQVMsRUFBRTtJQUMxRCxJQUFJLFNBQVMsRUFBRTtRQUNYLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLElBQUksWUFBWSxTQUFTLEVBQUU7Z0JBQzNCLFVBQVUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDcEQsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLFVBQVUsSUFBSSxDQUFDLENBQUM7YUFDbkI7U0FDSjtRQUNELE9BQU8sVUFBVSxDQUFDO0tBQ3JCLE1BQU07UUFDSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUNoQztDQUNKLENBQUM7Ozs7Ozs7QUFPRixTQUFTLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsU0FBUyxFQUFFO0lBQ3pELElBQUksU0FBUyxFQUFFO1FBQ1gsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsU0FBUyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNsRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdEIsU0FBUyxJQUFJLENBQUMsQ0FBQzthQUNsQjtTQUNKO1FBQ0QsT0FBTyxTQUFTLENBQUM7S0FDcEIsTUFBTTtRQUNILE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztLQUMvQjtDQUNKLENBQUM7Ozs7Ozs7QUFPRixTQUFTLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsU0FBUyxFQUFFOztJQUV4RCxJQUFJLFNBQVMsRUFBRTtRQUNYLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLElBQUksWUFBWSxTQUFTLEVBQUU7Z0JBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEQsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDekMsUUFBUSxJQUFJLENBQUMsQ0FBQzthQUNqQjtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7S0FDbkIsTUFBTTtRQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7S0FDdkQ7Q0FDSixDQUFDOzs7Ozs7O0FBT0YsU0FBUyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxTQUFTLEVBQUU7SUFDckQsSUFBSSxTQUFTLEVBQUU7UUFDWCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLElBQUksWUFBWSxTQUFTLEVBQUU7Z0JBQzNCLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzFDLE1BQU07Z0JBQ0gsS0FBSyxJQUFJLENBQUMsQ0FBQzthQUNkO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztLQUNoQixNQUFNO1FBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUM3QjtDQUNKLENBQUM7O0FDdk5GLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUN6QyxxREFBcUQ7Ozs7UUFJakQsSUFBSSxFQUFFLEVBQUU7Ozs7Ozs7Ozs7O1FBV1IsVUFBVSxFQUFFLEVBQUU7Ozs7Ozs7Ozs7O1FBV2QsV0FBVyxFQUFFLEVBQUU7Ozs7UUFJZixtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCLGVBQWUsRUFBRSxFQUFFOzs7UUFHbkIsaUJBQWlCLEVBQUUsRUFBRTs7UUFFckIsVUFBVSxFQUFFLEtBQUs7O1FBRWpCLFNBQVMsRUFBRSxLQUFLOztRQUVoQixXQUFXLEVBQUUsSUFBSTtLQUNwQixDQUFDO0NBQ0w7O0FBRUQ7OztJQUdJLGVBQWUsRUFBRSxVQUFVLFVBQVUsRUFBRSxRQUFRLEVBQUU7UUFDN0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNqQixjQUFjLEdBQUcsVUFBVSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7U0FDcEQ7UUFDRCxJQUFJLFVBQVUsRUFBRTtZQUNaLEtBQUssSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFO2dCQUN4QixJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtvQkFDckMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDekM7YUFDSjtTQUNKO1FBQ0QsSUFBSSxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQ2xCLElBQUksVUFBVSxDQUFDLEtBQUssWUFBWSxRQUFRLEVBQUU7WUFDdEMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNqRDthQUNJO1lBQ0QsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7U0FDNUI7UUFDRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLFlBQVksUUFBUSxFQUFFO1lBQ3ZDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbkQ7YUFDSTtZQUNELE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1NBQzlCO1FBQ0Q7WUFDSSxjQUFjLENBQUMsS0FBSyxLQUFLLEtBQUs7ZUFDM0IsY0FBYyxDQUFDLE1BQU0sS0FBSyxNQUFNO1VBQ3JDO1lBQ0UsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDekQ7U0FDSjtRQUNELGNBQWMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzdCLGNBQWMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztRQUUvQixPQUFPLGNBQWMsQ0FBQztLQUN6Qjs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTs7Ozs7O0lBTXZDLFlBQVksRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFOzs7OztJQUtoQyxhQUFhLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDMUIsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdEM7S0FDSjs7SUFFRCxNQUFNLEVBQUUsWUFBWSxFQUFFOztJQUV0QixTQUFTLEVBQUUsVUFBVSxRQUFRLGVBQWUsSUFBSSxFQUFFO1FBQzlDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTs7WUFFZCxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLFFBQVE7U0FDWDs7O1FBR0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFOztZQUVoQixJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUU7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pDO2lCQUNJO2dCQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQztTQUNKO2FBQ0k7O1lBRUQsSUFBSSxDQUFDLFVBQVU7VUFDakI7WUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFOztnQkFFakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7YUFDbEc7WUFDRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6Qzs7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztRQUV0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7O0lBRUQsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRTtnQkFDMUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUN6RTtnQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMzRTtpQkFDSTs7O2dCQUdELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzthQUNyRTtTQUNKO0tBQ0o7O0lBRUQsSUFBSSxFQUFFLFVBQVUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7OztRQUdqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHO1lBQzVCLElBQUksRUFBRSxRQUFRO1lBQ2QsR0FBRyxFQUFFLFdBQVc7U0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3BDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkMsSUFBSSxFQUFFLElBQUk7WUFDVixHQUFHLEVBQUUsWUFBWTtTQUNwQixDQUFDLENBQUM7OztRQUdILElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNsRDs7SUFFRCxLQUFLLEVBQUUsWUFBWTtRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0tBQ3pCOztJQUVELGVBQWUsRUFBRSxVQUFVLFVBQVUsRUFBRTtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixLQUFLLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztTQUN6QztLQUNKOztJQUVELFdBQVcsRUFBRSxZQUFZO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDOztRQUV2QixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQztLQUNKOztJQUVELFVBQVUsRUFBRSxZQUFZOztRQUVwQixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUU7b0JBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDbkU7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQy9EO3FCQUNJO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDL0Q7YUFDSjtTQUNKO0tBQ0o7Q0FDSixDQUFDOztBQzVPRixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDaEMsNENBQTRDOzs7O1FBSXhDLEtBQUssRUFBRSxFQUFFO0tBQ1osQ0FBQztDQUNMOztBQUVEOzs7OztJQUtJLEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDdEI7Ozs7SUFJRCxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUU7O1FBRXJCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU87U0FDVjs7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFFdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDdEI7Ozs7SUFJRCxVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDeEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSjs7Ozs7SUFLRCxhQUFhLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEI7U0FDSjtLQUNKOzs7O0lBSUQsTUFBTSxFQUFFLFlBQVk7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDekI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRXpCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNkLFNBQVM7YUFDWjtZQUNELEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3pCLFNBQVM7aUJBQ1o7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQztvQkFDbkUsU0FBUztpQkFDWjtnQkFDRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztnQkFFekMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxPQUFPLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ25EO3FCQUNJO29CQUNELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO3dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUM7cUJBQ3REO3lCQUNJO3dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUM7cUJBQ3JGO2lCQUNKO2FBQ0o7U0FDSjtLQUNKOztJQUVELE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRTtRQUN0QixJQUFJLElBQUksQ0FBQzs7UUFFVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLFlBQVkwQyxjQUFTLEVBQUU7WUFDekQsS0FBSyxHQUFHO2dCQUNKLElBQUksRUFBRSxLQUFLO2FBQ2QsQ0FBQztTQUNMOztRQUVELElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO29CQUN6QixJQUFJLEdBQUcsR0FBRyxDQUFDO2lCQUNkO2FBQ0o7U0FDSjthQUNJO1lBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDckI7UUFDRCxJQUFJLElBQUksRUFBRTtZQUNOLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRTs7Z0JBRVgsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNkLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0M7YUFDSjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDeEIsT0FBTztvQkFDSCxJQUFJLEVBQUUsSUFBSTtvQkFDVixHQUFHLEVBQUUsUUFBUTtpQkFDaEIsQ0FBQzthQUNMO1NBQ0o7S0FDSjtDQUNKLENBQUM7O0FDOUhGLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVztJQUNyQyxPQUFPOztRQUVILFFBQVEsRUFBRSxFQUFFOztRQUVaLFlBQVksRUFBRSxJQUFJLFdBQVcsRUFBRTs7UUFFL0IsWUFBWSxFQUFFLElBQUksV0FBVyxDQUFDO1lBQzFCLFdBQVcsRUFBRSxLQUFLO1NBQ3JCLENBQUM7S0FDTCxDQUFDO0NBQ0w7O0FBRUQ7SUFDSSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUU7UUFDcEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztLQUMzQjs7OztJQUlELE1BQU0sRUFBRSxTQUFTLFFBQVEsRUFBRSxXQUFXLEVBQUU7UUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7O1lBRXBCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQzthQUNKO1NBQ0o7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztZQUV4QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQy9COztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3RDOztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDbEQ7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztZQUV4QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQzlCO0tBQ0o7O0lBRUQsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDNUM7O0lBRUQsY0FBYyxFQUFFLFVBQVUsVUFBVSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDOztJQUVELGNBQWMsRUFBRSxZQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7O0lBTUQsT0FBTyxFQUFFLFVBQVUsUUFBUSxFQUFFO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3JDO0NBQ0osQ0FBQzs7QUMzRUYsSUFBSUMsV0FBUyxHQUFHLGNBQWMsQ0FBQyxNQUFNOztBQUVyQztJQUNJLElBQUksRUFBRSxPQUFPOzs7O0lBSWIsS0FBSyxFQUFFLElBQUk7Ozs7SUFJWCxNQUFNLEVBQUUsSUFBSTs7OztJQUlaLGVBQWUsRUFBRSxJQUFJOzs7O0lBSXJCLElBQUksRUFBRSxLQUFLOztDQUVkLEVBQUUsV0FBVztJQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztDQUN4QyxFQUFFO0lBQ0MsTUFBTSxFQUFFLFNBQVMsUUFBUSxFQUFFOztRQUV2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDOztRQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztRQUU3QixJQUFJLFVBQVUsQ0FBQzs7UUFFZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTs7WUFFZixVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7U0FFM0Y7YUFDSTs7WUFFRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25DLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDM0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQzs7Z0JBRXJDLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRSxJQUFJLE9BQU8sVUFBVSxDQUFDLElBQUksUUFBUSxFQUFFO29CQUNoQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoQztnQkFDRCxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQzthQUMzQztZQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7WUFJM0IsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3RELElBQUksR0FBRyxFQUFFO2dCQUNMLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDZCxLQUFLLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2pDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2xDLElBQUksVUFBVSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRTt3QkFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDekI7aUJBQ0o7Z0JBQ0QsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1Qjs7OztZQUlELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixRQUFRLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7WUFDdEUsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEYsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDOztZQUV4QixXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDOztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztRQUV4QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztLQUN6QjtDQUNKLENBQUM7O0FDdEZGLElBQUlDLGFBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVc7SUFDL0Msa0RBQWtEOzs7O1FBSTlDLE9BQU8sRUFBRSxJQUFJOzs7UUFHYixPQUFPLEVBQUU7WUFDTCxLQUFLLEVBQUUsRUFBRTtTQUNaO0tBQ0osQ0FBQztDQUNMLEVBQUUsWUFBWTtDQUNkLEVBQUU7O0lBRUMsU0FBUyxFQUFFLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDdkI7OztJQUdELFdBQVcsRUFBRSxZQUFZLEVBQUU7SUFDM0IsVUFBVSxFQUFFLFlBQVksRUFBRTtDQUM3QixDQUFDOztBQzVCRjtBQUNBLEFBMENBLElBQUlDLFlBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDL0MsaURBQWlEOzs7O1FBSTdDLElBQUksRUFBRSxFQUFFOzs7OztRQUtSLE1BQU0sRUFBRSxFQUFFOzs7OztRQUtWLE9BQU8sRUFBRSxJQUFJOzs7OztRQUtiLE1BQU0sRUFBRSxFQUFFOzs7Ozs7Ozs7OztRQVdWLFVBQVUsRUFBRSxFQUFFOzs7Ozs7Ozs7OztRQVdkLFdBQVcsRUFBRSxFQUFFOzs7OztRQUtmLElBQUksRUFBRSxJQUFJOzs7O1FBSVYsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixlQUFlLEVBQUUsRUFBRTs7O1FBR25CLGlCQUFpQixFQUFFLEVBQUU7O1FBRXJCLFVBQVUsRUFBRSxLQUFLOztRQUVqQixTQUFTLEVBQUUsS0FBSzs7UUFFaEIsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQztDQUNMLEVBQUUsWUFBWTs7SUFFWCxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztRQUNoQixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU07S0FDeEIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDcEI7O0FBRUQ7Ozs7SUFJSSxNQUFNLEVBQUUsVUFBVSxRQUFRLEVBQUUsV0FBVyxFQUFFO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztRQUV2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs7UUFFdkIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQzs7UUFFdEIsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDakQ7O1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O1lBRXpCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDM0M7YUFDSTtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs7WUFFdkIsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDMUIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUMzQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDeEM7Z0JBQ0QsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUNyQyxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDakMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDaEM7Z0JBQ0QsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBRWpELEtBQUssSUFBSSxVQUFVLElBQUksZ0JBQWdCLEVBQUU7O2dCQUVyQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU07b0JBQ3BDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVU7aUJBQzNDLENBQUM7YUFDTDs7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7OztZQUkzQixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1RDs7UUFFRCxLQUFLLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkM7O1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O1FBRXRCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3pDOzs7SUFHRCxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUUsUUFBUSxFQUFFO1FBQzdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsY0FBYyxHQUFHLFVBQVUsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxVQUFVLEVBQUU7WUFDWixLQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3JDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pDO2FBQ0o7U0FDSjtRQUNELElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNsQixJQUFJLE9BQU8sVUFBVSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDeEMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNqRDthQUNJO1lBQ0QsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7U0FDNUI7UUFDRCxJQUFJLE9BQU8sVUFBVSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDekMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNuRDthQUNJO1lBQ0QsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7U0FDOUI7UUFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQjtZQUNJLGNBQWMsQ0FBQyxLQUFLLEtBQUssS0FBSztlQUMzQixjQUFjLENBQUMsTUFBTSxLQUFLLE1BQU07VUFDckM7WUFDRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7UUFDRCxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM3QixjQUFjLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFL0IsT0FBTyxjQUFjLENBQUM7S0FDekI7Ozs7Ozs7SUFPRCxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNyQzs7Ozs7O0lBTUQsWUFBWSxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7Ozs7O0lBS0QsYUFBYSxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQzFCLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0o7Ozs7Ozs7Ozs7Ozs7OztJQWVELE1BQU0sRUFBRSxVQUFVLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdEQ7Ozs7OztJQU1ELFFBQVEsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ25EOztJQUVELGVBQWUsRUFBRSxVQUFVLFVBQVUsRUFBRTtRQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUU7Z0JBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDekU7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDM0U7aUJBQ0k7OztnQkFHRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDSjtLQUNKOztJQUVELEtBQUssRUFBRSxZQUFZO1FBQ2YsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7UUFHMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztLQUMzQztDQUNKLENBQUM7O0FDOVNGLHNCQUFlLHVwRUFBdXBFLENBQUM7O0FDQXZxRSxlQUFlLHU4Q0FBdThDLENBQUM7O0FDQXY5QyxjQUFlLDJvQ0FBMm9DLENBQUM7O0FDQTNwQyxjQUFlLHE4QkFBcThCLENBQUM7O0FDQXI5QixtQkFBZSxrY0FBa2MsQ0FBQzs7QUNBbGQsaUJBQWUsMmJBQTJiLENBQUM7O0FDQTNjLGlCQUFlLGtpQ0FBa2lDLENBQUM7O0FDQWxqQyxxQkFBZSwydkNBQTJ2QyxDQUFDOztBQ0Ezd0MsbUJBQWUscXlDQUFxeUMsQ0FBQzs7QUNBcnpDLGNBQWUsMDBIQUEwMEgsQ0FBQzs7QUNBMTFILG9CQUFlLGdsREFBZ2xELENBQUM7O0FDQWhtRCxnQkFBZSxzeUNBQXN5QyxDQUFDOztBQ0F0ekMsZUFBZSx5eUVBQXl5RSxDQUFDOztBQ2dCMXlFLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRTs7SUFFckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRTVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7OztDQUU5QixEQ3JCREMsUUFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFbEMsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7Ozs7Ozs7OztBQVMxQyxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDbEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNsQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxHQUFHLEdBQUc7UUFDTixRQUFRLEVBQUUsRUFBRTtRQUNaLFVBQVUsRUFBRSxFQUFFO0tBQ2pCLENBQUM7SUFDRixJQUFJLFNBQVMsR0FBRyxTQUFTLFNBQVMsRUFBRSxVQUFVLEVBQUU7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxJQUFJLEVBQUU7Z0JBQ04sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtTQUNKO0tBQ0osQ0FBQzs7SUFFRixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDOUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3REOztJQUVELFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLFVBQVUsRUFBRTtRQUMvQyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMxQixTQUFTLEVBQUUsQ0FBQztLQUNmLENBQUMsQ0FBQzs7SUFFSCxPQUFPLFVBQVUsQ0FBQztDQUNyQjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUNyQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQztJQUNyQyxJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksT0FBTyxDQUFDOztJQUVaLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNuQixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxHQUFHLEVBQUU7WUFDTCxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMvQzthQUNJLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbEMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLFlBQVksR0FBRyxTQUFTLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsT0FBTztTQUNWO0tBQ0o7O0lBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztpQkFDSTtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUc7b0JBQ1gsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtvQkFDaEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRztpQkFDakMsQ0FBQzthQUNMO1NBQ0o7S0FDSjtJQUNELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUNsQixPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQy9CLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7YUFDcEQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7YUFDMUQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFFO2dCQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7YUFDOUQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0o7S0FDSjtJQUNELElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQ2xCLElBQUksR0FBRyxJQUFJQyxXQUFjLENBQUM7WUFDdEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0tBQ047U0FDSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxHQUFHLElBQUlDLGFBQWdCLENBQUM7WUFDeEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztLQUNOOztTQUVJO1FBQ0QsSUFBSSxHQUFHLElBQUlDLFlBQWUsQ0FBQztZQUN2QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7WUFDbkIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsT0FBTztTQUNuQixDQUFDLENBQUM7S0FDTjtJQUNELElBQUksSUFBSSxFQUFFO1FBQ04sSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ3JCLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDbEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2pCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7d0JBQ3ZCLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDckM7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLEVBQUU7NEJBQ0gsY0FBYyxFQUFFLG9CQUFvQjtnQ0FDaEMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUM7NkJBQzVCO3lCQUNKLENBQUM7cUJBQ0w7aUJBQ0o7cUJBQ0ksSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNoQztnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDL0IsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUMvQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNwRDtTQUNKO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztDQUNmOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUNyQyxPQUFPLEtBQUssQ0FBQztDQUNoQjtBQUNELFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUN0QyxPQUFPLE1BQU0sQ0FBQztDQUNqQjs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtJQUNqQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDZixJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ1osT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFDRCxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQztTQUNyRSxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTs7Z0JBRWIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3RCO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDckI7U0FDSixDQUFDLENBQUM7O0lBRVAsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1NBQ2QsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO1lBQ3BCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDekIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtvQkFDekIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQjt3QkFDMUIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTO3FCQUN2QyxDQUFDO2lCQUNMO3FCQUNJO29CQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQ3JCO2FBQ0o7U0FDSixDQUFDLENBQUM7SUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtRQUNkLEtBQUssQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7S0FDbEM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNmLEtBQUssQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUM7S0FDcEM7O0lBRUQsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtRQUM3QixLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7S0FDekM7SUFDRCxPQUFPLEtBQUssQ0FBQztDQUNoQjs7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDaEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2IsT0FBTztLQUNWO0lBQ0QsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDM0NqRCxNQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxXQUFXLEVBQUUsSUFBSSxFQUFFO1FBQ2pELElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksZUFBZSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDM0IsT0FBT0EsTUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDeEQsQ0FBQyxDQUFDO2FBQ047WUFDRCxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDekM7YUFDSSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM5QixJQUFJLGVBQWUsRUFBRTtnQkFDakIsSUFBSSxHQUFHQSxNQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZDO2FBQ0k7WUFDRCxPQUFPO1NBQ1Y7O1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVc7WUFDL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUN6QixPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtnQkFDZixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDZDtTQUNKLENBQUMsQ0FBQztLQUNOLENBQUMsQ0FBQzs7SUFFSCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDdkIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3RCO0NBQ0o7O0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzFDLE9BQU8sVUFBVSxRQUFRLEVBQUU7O1FBRXZCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDOztRQUV6QyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ25DLENBQUM7Q0FDTDs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0lBQzdDLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ25CLE9BQU8sVUFBVSxRQUFRLEVBQUU7UUFDdkIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdkMsQ0FBQztDQUNMOztBQUVELFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRTs7SUFFNUIsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLElBQUksT0FBTyxFQUFFO1FBQ1QsSUFBSTtZQUNBLElBQUksSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFMUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxDQUFDLEVBQUU7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDMUM7S0FDSjtDQUNKOztBQ2xURCxhQUFhOztBQ0FiLGtCQUFlLGtuTUFBa25NLENBQUM7O0FDQWxvTSxnQkFBZSw0c0RBQTRzRCxDQUFDOztBQ2E1dEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztBQUV6QixTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRTtJQUM3QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUM7SUFDaEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFekIsT0FBTyxNQUFNLENBQUM7Q0FDakI7Ozs7QUFJRCxTQUFTLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFOztJQUVsRixPQUFPLFVBQVUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7UUFDN0MsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzNDLElBQUksTUFBTSxLQUFLLGFBQWEsRUFBRTtZQUMxQixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDakU7YUFDSSxJQUFJLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO1lBQzNFLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO2FBQ0ksSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQzdCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1NBQzNEO2FBQ0ksSUFBSSxNQUFNLEtBQUssWUFBWSxFQUFFO1lBQzlCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDO1NBQzVEO2FBQ0ksSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFOztZQUUvQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ3RELElBQUksV0FBVyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxXQUFXLElBQUksQ0FBQyxDQUFDO2FBQzNCO1lBQ0QsT0FBTyxDQUFDLENBQUM7U0FDWjthQUNJO1lBQ0QsSUFBSSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ25GLElBQUksYUFBYSxHQUFHLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDeEgsUUFBUSxNQUFNO2dCQUNWLEtBQUssWUFBWTtvQkFDYixPQUFPLG9CQUFvQixJQUFJLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNqSCxLQUFLLGVBQWU7b0JBQ2hCLE9BQU8sYUFBYSxDQUFDO2dCQUN6QixLQUFLLGtCQUFrQjtvQkFDbkIsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUMzQixLQUFLLGNBQWM7b0JBQ2YsT0FBTyxvQkFBb0IsQ0FBQztnQkFDaEMsS0FBSyxtQkFBbUI7b0JBQ3BCLE9BQU8sb0JBQW9COzBCQUNyQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDOzBCQUMzRCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7YUFDMUU7U0FDSjtLQUNKLENBQUM7Q0FDTDs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFO0lBQ2hFLE9BQU8sVUFBVSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtRQUM3QyxJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0MsUUFBUSxNQUFNO1lBQ1YsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLE9BQU87Z0JBQ1IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsS0FBSyxXQUFXO2dCQUNaLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxLQUFLLFlBQVk7Z0JBQ2IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDN0QsS0FBSyxjQUFjO2dCQUNmLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLG1CQUFtQixDQUFDO1lBQy9ELEtBQUssaUJBQWlCO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsS0FBSyxRQUFRO2dCQUNULE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELEtBQUssYUFBYTs7Z0JBRWQsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFO29CQUN0RCxJQUFJLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3RELE9BQU8sV0FBVyxJQUFJLEdBQUcsQ0FBQztpQkFDN0I7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7U0FDbEI7S0FDSixDQUFDO0NBQ0w7Ozs7Ozs7Ozs7Ozs7QUFhRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7O0lBRWxDLElBQUksaUJBQWlCLEdBQUc7UUFDcEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTztRQUMxQixLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWE7UUFDNUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxhQUFhO0tBQy9CLENBQUM7O0lBRUYsNENBQTRDOzs7Ozs7UUFNeEMsb0JBQW9CLEVBQUUsSUFBSTs7Ozs7O1FBTTFCLG9CQUFvQixFQUFFLElBQUk7Ozs7OztRQU0xQixvQkFBb0IsRUFBRSxJQUFJOzs7Ozs7UUFNMUIsb0JBQW9CLEVBQUUsS0FBSzs7UUFFM0IsaUJBQWlCLEVBQUUsS0FBSzs7UUFFeEIsa0JBQWtCLEVBQUUsRUFBRTs7Ozs7UUFLdEIsWUFBWSxFQUFFLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7O1lBRXRDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtTQUMzQixFQUFFLGlCQUFpQixDQUFDLENBQUM7OztRQUd0QixZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7OztZQUl0QyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDN0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyx1QkFBdUI7U0FDeEMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOzs7Ozs7UUFNdEIsWUFBWSxFQUFFLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDOztRQUU5QyxZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7WUFFdEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQzNCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7UUFFdEIsaUJBQWlCLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDN0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysb0JBQW9CLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDaEMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysb0JBQW9CLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDaEMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysa0JBQWtCLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDOUIsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDOztRQUVGLFlBQVksRUFBRSxJQUFJLFdBQVcsRUFBRTs7UUFFL0IsaUJBQWlCLEVBQUUsSUFBSSxRQUFRLENBQUM7WUFDNUIsTUFBTSxFQUFFLElBQUksTUFBTTtnQkFDZCxNQUFNLENBQUMsTUFBTSxDQUFDLDhCQUE4QixDQUFDO2dCQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDO2FBQ25EO1lBQ0QsYUFBYSxFQUFFO2dCQUNYLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1lBQ0QsZUFBZSxFQUFFO2dCQUNiLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1NBQ0osQ0FBQztRQUNGLGlCQUFpQixFQUFFLElBQUksUUFBUSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxJQUFJLE1BQU07Z0JBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQzthQUNuRDtZQUNELGFBQWEsRUFBRTtnQkFDWCxXQUFXLEVBQUUsSUFBSTthQUNwQjtZQUNELGVBQWUsRUFBRTtnQkFDYixXQUFXLEVBQUUsSUFBSTthQUNwQjtTQUNKLENBQUM7UUFDRixpQkFBaUIsRUFBRSxJQUFJLFFBQVEsQ0FBQztZQUM1QixNQUFNLEVBQUUsSUFBSSxNQUFNO2dCQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUM7YUFDbkQ7WUFDRCxhQUFhLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLElBQUk7YUFDbkI7WUFDRCxlQUFlLEVBQUU7Z0JBQ2IsVUFBVSxFQUFFLElBQUk7YUFDbkI7U0FDSixDQUFDOztRQUVGLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQztZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztTQUN6RCxDQUFDO0tBQ0wsQ0FBQztDQUNMLHNDQUFzQzs7Ozs7OztJQU9uQyxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssS0FBSztlQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxNQUFNO1VBQ3hDO1lBQ0UsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUNyQzs7O0lBR0QsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUM3QyxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDaEI7YUFDSTtZQUNELFFBQVEsR0FBRztnQkFDUCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU07Z0JBQzVCLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQzdCLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUN6Qzs7SUFFRCxXQUFXLEVBQUUsWUFBWTtRQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7U0FDckM7YUFDSTtZQUNELE9BQU87Z0JBQ0gsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUNoQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3RCLENBQUM7U0FDTDtLQUNKOzs7Ozs7Ozs7SUFTRCxNQUFNLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7UUFDN0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7O1FBRWxCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7O1FBRXJCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEMsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQzs7UUFFcEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFFdEQsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDOztRQUU3QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRTtnQkFDOUIsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRTtvQkFDbkMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BEO2FBQ0o7U0FDSjtRQUNELGlCQUFpQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O1FBRWxDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOztRQUVyQixJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUNuRixvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDL0I7O1FBRUQsSUFBSSxvQkFBb0IsRUFBRTtZQUN0QixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDdEc7O1FBRUQsU0FBUyxhQUFhLEdBQUc7WUFDckIsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDOztnQkFFcEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQzthQUMvRjtZQUNELEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxFQUFFO2dCQUNWLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7O1FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFO1lBQ25ELE9BQU8sVUFBVSxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDO1NBQzFEOzs7UUFHRCxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxvQkFBb0IsRUFBRTs7WUFFdEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUUzQixhQUFhLEVBQUUsQ0FBQzs7WUFFaEIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDOUMsSUFBSSxVQUFVLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLFlBQVk7b0JBQ3JCLE9BQU8sZ0JBQWdCLENBQUM7aUJBQzNCO2dCQUNELFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDMUcsaUJBQWlCLEVBQUUsaUJBQWlCO2dCQUNwQyxXQUFXLEVBQUUsUUFBUSxDQUFDLGlCQUFpQjthQUMxQyxDQUFDOztZQUVGLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztTQUU5RDtRQUNELElBQUksb0JBQW9CLEVBQUU7OztZQUd0QixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBRTNCLGFBQWEsRUFBRSxDQUFDOztZQUVoQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QyxJQUFJLFVBQVUsR0FBRztnQkFDYixXQUFXLEVBQUUsWUFBWTtvQkFDckIsT0FBTyxnQkFBZ0IsQ0FBQztpQkFDM0I7Z0JBQ0QsVUFBVSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUM7Z0JBQ2xGLGlCQUFpQixFQUFFLGlCQUFpQjtnQkFDcEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7YUFDMUMsQ0FBQztZQUNGLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzlEOztRQUVELElBQUksb0JBQW9CLEVBQUU7WUFDdEIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOztZQUU3RCxhQUFhLEVBQUUsQ0FBQzs7OztZQUloQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7O1lBRWhCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzlDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEYsSUFBSSxVQUFVLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLFlBQVk7b0JBQ3JCLE9BQU8sZ0JBQWdCLENBQUM7aUJBQzNCO2dCQUNELFdBQVcsRUFBRSxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUU7b0JBQ3pDLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxhQUFhLEVBQUU7d0JBQ2YsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDbkMsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFOzRCQUM5QyxJQUFJLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUN6RixJQUFJLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQzs0QkFDbkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dDQUMxQix1QkFBdUIsR0FBRyxVQUFVLENBQUMseUJBQXlCLEdBQUcsSUFBSSxTQUFTLENBQUM7b0NBQzNFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztvQ0FDbkIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29DQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87b0NBQzFCLFNBQVMsRUFBRSxLQUFLO29DQUNoQixLQUFLLEVBQUUsS0FBSztpQ0FDZixDQUFDLENBQUM7NkJBQ047NEJBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU07bUNBQzVCLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU07OEJBQ2hGO2dDQUNFLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDakY7aUNBQ0k7Z0NBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0NBQ3hELHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ3JFOzZCQUNKOzRCQUNELHVCQUF1QixDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7NEJBQzFELHVCQUF1QixDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7eUJBQy9EOzZCQUNJOzRCQUNELElBQUksaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQ2hGLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLElBQUksVUFBVSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7Z0NBQy9HLFVBQVUsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDbkY7NEJBQ0QsVUFBVSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3lCQUM3RDtxQkFDSjtvQkFDRCxVQUFVLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDN0YsSUFBSSxhQUFhLEVBQUU7O3dCQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixFQUFFLGNBQWMsQ0FBQyxDQUFDO3FCQUNuRTt5QkFDSTt3QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDeEc7aUJBQ0o7Z0JBQ0QsVUFBVSxFQUFFLFVBQVUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7b0JBQ2xELElBQUksTUFBTSxLQUFLLHlCQUF5QixFQUFFO3dCQUN0QyxPQUFPLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDL0M7eUJBQ0ksSUFBSSxNQUFNLEtBQUssZ0JBQWdCLEVBQUU7d0JBQ2xDLE9BQU8sVUFBVSxDQUFDLHVCQUF1QixDQUFDO3FCQUM3Qzt5QkFDSSxJQUFJLE1BQU0sS0FBSyx5QkFBeUIsRUFBRTt3QkFDM0MsT0FBTyxVQUFVLENBQUMseUJBQXlCLENBQUM7cUJBQy9DO3lCQUNJLElBQUksTUFBTSxLQUFLLGFBQWEsRUFBRTt3QkFDL0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDaEQ7eUJBQ0k7d0JBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqQztpQkFDSjtnQkFDRCxpQkFBaUIsRUFBRSxZQUFZOztvQkFFM0IsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7YUFDMUMsQ0FBQzs7WUFFRixRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztTQUM5RDs7UUFFRCxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQkQsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ3JELElBQUksVUFBVSxHQUFHO1lBQ2IsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsQ0FBQztZQUNSLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFDO1lBQ1QsUUFBUSxFQUFFLENBQUM7U0FDZCxDQUFDO1FBQ0YsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQzs7WUFFM0MsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNuQjs7UUFFRCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzs7UUFFakQsSUFBSSxRQUFRLEVBQUU7WUFDVixRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs7UUFFdkYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNoQyxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFM0IsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUMzQjs7Ozs7Ozs7Ozs7SUFXRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7SUFRRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7Ozs7SUFXRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7O0lBU0QsaUJBQWlCLEVBQUUsWUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7Ozs7OztJQU1ELE9BQU8sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2QztDQUNKLENBQUM7O0FDM2xCRixJQUFJa0QsTUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLG1DQUFtQztJQUN6RCxPQUFPLEVBQUUsS0FBSzs7OztJQUlkLFNBQVMsRUFBRSxDQUFDOzs7OztJQUtaLFlBQVksRUFBRSxDQUFDOzs7OztJQUtmLE1BQU0sRUFBRSxDQUFDOzs7OztJQUtULFdBQVcsRUFBRSxFQUFFOzs7OztJQUtmLGNBQWMsRUFBRSxDQUFDO0NBQ3BCLEVBQUUsV0FBVztJQUNWLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoQjs7QUFFRDs7OztJQUlJLEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNyQixLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7UUFFbEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQzs7UUFFbkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztRQUV4QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUV0QyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3Qzs7O1FBR0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUUxQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7OztRQUdELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3QixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVEOzs7UUFHRCxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDSjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMs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Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQ2YsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFNUIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDOztJQUVuQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztJQUU1QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7SUFFYixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25HLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3BCLENBQUM7O0FDNVBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLEFBcUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9JLENBQUM7O0FDcFBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxBQVNBLGVBQWU7SUFDWCxJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJQUFJO0lBQ1YsSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxLQUFLO0lBQ1osSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJ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LEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztDQUNOOzs7Ozs7Ozs7O0FBVUQsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNyQixDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDMUMsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7O0FBUWhDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7QUFPN0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcs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 diff --git a/example/app_basic.html b/example/app_basic.html index f3c02e41b..a2d49620d 100644 --- a/example/app_basic.html +++ b/example/app_basic.html @@ -19,7 +19,7 @@ var app = clay.application.create('#main', { init: function (app) { // Create camera - this._camera = app.createCamera([0, 2, 5], [0, 0, 0]); + this._camera = app.createCamera([0, 2, 15], [0, 0, 0]); // Create cube this._cube = app.createCube({ @@ -32,6 +32,7 @@ loop: function (app) { this._cube.rotation.rotateY(app.frameTime / 1000); + // this._cube.rotation.rotateAxis([0,-1,0],app.frameTime / 1000); } }); diff --git a/src/glmatrix/quat.js b/src/glmatrix/quat.js index 693abc731..8e4c202a3 100644 --- a/src/glmatrix/quat.js +++ b/src/glmatrix/quat.js @@ -198,6 +198,20 @@ quat.setAxisAngle = function(out, axis, rad) { return out; }; +/** + * zh : 绕单位向量自转 + * @param out {quat} + * @param quat2 {quat} + * @param axis {vec3} + * @param rad {Number} + */ + +quat.rotateAxis = function (out,quat2,axis,rad) { + vec3.normalize(axis,axis); + quat.setAxisAngle(quat2,axis,rad); + quat.multiply(out,out,quat2); +} + /** * Adds two quat's * @@ -253,16 +267,10 @@ quat.scale = vec4.scale; * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateX = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bx = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw + aw * bx; - out[1] = ay * bw + az * bx; - out[2] = az * bw - ay * bx; - out[3] = aw * bw - ax * bx; +quat.rotateX = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [1,0,0]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -274,16 +282,10 @@ quat.rotateX = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateY = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - by = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw - az * by; - out[1] = ay * bw + aw * by; - out[2] = az * bw + ax * by; - out[3] = aw * bw - ay * by; +quat.rotateY = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,1,0]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -295,16 +297,10 @@ quat.rotateY = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateZ = function (out, a, rad) { - rad *= 0.5; - - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bz = Math.sin(rad), bw = Math.cos(rad); - - out[0] = ax * bw + ay * bz; - out[1] = ay * bw - ax * bz; - out[2] = az * bw + aw * bz; - out[3] = aw * bw - az * bz; +quat.rotateZ = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,0,1]; + quat.rotateAxis(out,quat2,axis,rad); return out; }; @@ -319,7 +315,6 @@ quat.rotateZ = function (out, a, rad) { */ quat.calculateW = function (out, a) { var x = a[0], y = a[1], z = a[2]; - out[0] = x; out[1] = y; out[2] = z; diff --git a/src/glmatrix/vec3.js b/src/glmatrix/vec3.js index 147e73d54..85252eac5 100644 --- a/src/glmatrix/vec3.js +++ b/src/glmatrix/vec3.js @@ -366,6 +366,10 @@ vec3.normalize = function(out, a) { out[0] = a[0] * len; out[1] = a[1] * len; out[2] = a[2] * len; + }else{ + out[0] = 0; + out[1] = 0; + out[2] = 1; } return out; }; diff --git a/src/math/Quaternion.js b/src/math/Quaternion.js index c14afedec..bcee03e3b 100644 --- a/src/math/Quaternion.js +++ b/src/math/Quaternion.js @@ -262,6 +262,19 @@ Quaternion.prototype = { this._dirty = true; return this; }, + /** + * + * @param axis + * @param rad + */ + rotateAxis:function (axis,rad) { + + var quat2 = new Quaternion().array; + + quat.rotateAxis(this.array,quat2,axis,rad); + this._dirty = true; + return this; + }, /** * Rotate self by a given radian about X axis @@ -269,7 +282,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateX: function (rad) { - quat.rotateX(this.array, this.array, rad); + + quat.rotateX(this.array, rad); this._dirty = true; return this; }, @@ -280,7 +294,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateY: function (rad) { - quat.rotateY(this.array, this.array, rad); + + quat.rotateY(this.array, rad); this._dirty = true; return this; }, @@ -291,7 +306,7 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateZ: function (rad) { - quat.rotateZ(this.array, this.array, rad); + quat.rotateZ(this.array, rad); this._dirty = true; return this; },